一般的测试步骤如下:
1、 找到可控的输入
2 、尝试对输入进行HTML标记,看是否可以解析HTML
先用<a></a> <b></b>等进行测试看是否能够解析成功,如果能够成功解析(不是原样输出,比如<a>123</a>保存后页面显示123,此时通过f12查看源码,观察<a>是被过滤掉了还是被解析了,)再进行下一步的测试
3、查看网页源码,寻找输出点在哪里,然后尝试进行闭合等操作
如果页面提示不允许输入<>等特殊字符,可能是前端的校验,抓包尝试进行绕过(先输入符合条件的,不带有特殊字符,然后Burp抓包修改为payload)
XSS输出点总结:
(1)输出在属性里:
value属性 法一:"><img src=x onerror=alert(1);>
法二:"onclick=alert(1)"
(2)输出在HTML标签
<title></title>
<textarea></textarea>
<iframe></iframe>
<xmp></xmp>
需要闭合标签,再插入payload
特殊场景:
(1)FUZZ参数触发XSS
全局搜索hidden,发现隐藏的参数,经过尝试同样可以触发XSS漏洞,hidden可能之前用这个参数,后边不同之后就被弃用了,但是仍然可以赋予参数,尝试构造xss
例子:https://xxx.com/signIn?returnUrl="><ScRiPt>alert(1)<%2FScRiPt>
redirectUrl为登录跳转的参数,在登录界面经常出现,也最容易存在漏洞!

(2)文件上传导致XSS
一、限制上传限制的很严格,但是对上传的文件名并没有进行安全编码转换或者过滤,在展示界面进行了原样的输出(没有重命名文件名),触发了存储型XSS

二、文件上传过程中不允许上传php、jsp等或者无法解析getshell的时候,可以退而求其次尝试拿到一个XSS漏洞
能够解析svg文件
上传svg格式的文件
将content-type字段改为:image/svg+xml
什么是svg呢:<svg> 标签属于HTML五大元素中的外部元素,可以容纳文本、字符引用、CDATA段、其他元素和注释,也就是说在解析到<svg> 标签时,浏览器就开始使用一套新的标准开始解析后面的内容,直到碰到闭合标签</svg>。而在这一套新的标准遵循XML解析规则,在XML解析中,实体编码会自动解码成相应的字符,重新来一遍标签开启状态,此时就会执行XSS了
以下为一个svg文件:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100px" height="100px" viewBox="0 0 751 751" enable-background="new 0 0 751 751" xml:space="preserve"> <image id="image0" width="751" height="751" x="0" y="0"
href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAu8AAALvCAIAAABa4bwGAAAAIGNIUk0AAHomAACAhAAA+gAAAIDo" />
<script>alert(1)</script>
</svg>
(3)PDF→XSS
- 利用条件:1.有pdf文件上传点 2.保存好的pdf文件可以直接浏览器查看,而不是只能下载至本地。
PDF生成参考文章:https://www.cnblogs.com/xiaozi/p/9951622.html