之前写过类型的水文,感觉写的一般。重新再苟了一遍。
简单粗暴的Fuzz,是我的首选,可以从Github,推特以及一些xss_payload
分享网站,收集到足够的xss_payload
进行Fuzz测试。
首先我们先查看下,waf拦截包的差异,正常提交。
提交恶意xss_payload
。
比较两次提交,waf拦截时,数据包出现2548
这个关键数字。
接下来使用Burp
的Intruder
模块来Fuzz,导入payload。
fuzz结束后
,点击HTTP历史标签下发的Filter
弹出筛选过滤器界面,选择第三个,与关键字2548
匹配上的将不再显示。
剩下的都是waf不拦截
的。
fuzz的优点是速度
,当然xss_payload的质量
也影响最终的结果,所以平时多收集些字典满好的。
这方面的技巧蛮多的,使用一些对象或函数,让payload变形。
拼接方面,使用诸如top
this
self
parent
frames
content
window
这些对象。
直接使用这些对象连接函数,也可以绕过WAF。
拼接字符串。
可以看到alert函数被分成2个字符串,再拼接在一起。
编码,常见的你可能想到利用eval
,setTimeout()
,setInterval
等。
常见的base64编码
前几天看来一篇国外翻译的文章,看到一个有趣的例子。
将alert
JS16编码成\x61\x6c\x65\x72\x74
,成功弹框。
我自己尝试了下,也用了不同的编码
,发现都可以绕过waf,并成功弹框。
然后我又将编码拆分
,发现也可以弹框。
<body onpageshow=self['\x61\x6c\x65'%2B'\x72\x74'](1)>
接下来就是,一些特殊函数的利用。
concat()
在实际应用中,不仅仅可以用于连接两个或多个数组,还可以合并两个或者多个字符串。
join函数
将数组转换成字符串。
没有太多的亮点,只是在一些基础上变化了下,学的比较浅,如有错处,请师傅斧正。