xss注入工具 打开一个带反射型xss的入工搜索框,手动拼payload能把你逼疯。入工你输入<script>alert(1)</script>,入工页面弹窗,入工你以为成了。入工换个参数位置,入工引号被转义,入工尖括号被编码,入工你又得从头试。入工这时候你才明白,入工工具不是入工懒人借口,是入工刚需。 工具分两类。入工一类是入工扫描器,像Burp Suite的入工主动扫描,或者XSSer、XSStrike这种命令行选手。它们干的事很粗暴——往每个输入点塞几百种payload,看响应里有没有回显。另一类是辅助型,比如BeEF,专门管攻击成功后的浏览器控制,跟注入本身关系不大。但真正好用的工具,得会“思考”。 拿XSStrike举例。它不瞎试。先检测上下文,判断你的输入是进了HTML标签内部,还是属性值里,还是JavaScript代码段。接着它自己生成对应的payload——在标签里就试<svg/onload=alert(1)>,在属性里就拼" onfocus="alert(1),在JS里就构造';alert(1)//。这比人肉快十倍,而且它能绕过不少WAF,因为它会分析过滤规则,用编码或换行来混淆。 但工具不是万能的。有一次我测一个内部系统,所有自动工具都报安全。我手动看了下响应,发现输入被插到<textarea>标签里,而且</textarea>被转义了。工具没检测出问题,因为它只测了闭合标签。我试着换成</textarea><script>alert(1)</script>,结果那个系统的转义逻辑有漏洞——它只替换了第一个尖括号,后面的没管。弹窗成功。工具输给了“脏逻辑”。 选工具得看场景。黑盒测试,你面对一个陌生站点,先用Xray或者AWVS这类综合扫描器过一遍,能快速圈出可疑点。但它们的误报率也高,经常把不存在的问题标成高危。这时候你得用Burp的Repeater手动验证,把payload改得贴合实际上下文。白盒测试就简单了,直接看代码,用grep搜innerHTML、document.write这些危险函数,配合Semgrep规则,比任何扫描器都准。 有个细节很多人忽略——工具的输出你得会读。XSStrike显示“可能可利用”,不代表你就能拿到cookie。它只是说payload触发了某种反应,可能是alert弹窗,也可能是页面报错,甚至只是响应时间变了。你得自己看响应内容,确认是不是真的执行了JavaScript。别偷懒。 我见过最蠢的操作,是有人用工具扫出反射型xss,然后直接提交漏洞报告,说“可窃取用户cookie”。但实际上那个站点HttpOnly标记设了,cookie根本读不到。工具不会告诉你这些。它只告诉你“这里有个洞”,洞多深、能不能利用,还得靠人脑。 最后说个反直觉的事。很多时候,手动构造payload比工具快。比如你知道参数进了<img src="这里">,直接试"><svg/onload=alert(1)>,两秒就出结果。工具反而要启动、配置、跑扫描、等报告。所以高手通常把工具当辅助,自己脑子里装着一套“上下文分析引擎”。工具是拐杖,不是腿。 工具更新也快。XSSer几年前就停止维护了,现在用起来各种报错。XSStrike还在更新,但它的payload库也就那几百条。真正的高级攻击,比如mXSS(突变型xss),工具基本无能为力——那需要对浏览器解析器的深刻理解。你说工具重不重要?重要。但比工具更重要的,是你知道什么时候该信它,什么时候该扔了它自己上。 |