zoukankan      html  css  js  c++  java
  • 关于我学XSS躺过的那些坑

    XSS字符编码

    在学习编码绕过时由于数量多,类型相似,不太容易记得住,记得全,故做此记录。

    0x01 Html标签属性中执行

    简单了解:

    Html标签属性中的XSS问题多属于javascript伪协议
    常见的属性有:

    • src
    • lowsrc
    • dynsrc
    • url
    • href
    • action
    • onload
    • onunload
    • onmouseover
    • onerror
    • 各种on开头的事件

    PS:此处可不加括号,如onclick=javascript:alert(1),各类教程里常见的<img src=javascript:alert(1)></img>Chrome、Firfox已失效,IE测试成功。

    在Html标签中,许多标签具有执行javascript的权利,当服务器存在过滤时,我们可以尝试通过以下编码方法绕过:

    • 8/10/16进制转换([.][&#][&#x])
    • 利用javascript:String.fromCharCode(xx,xx,xx......) [xx为编码的字符串的ASCII码]
    • JScript Encode [IE] JS fuck等
    • data:text/html;bbase64,xxxxxxx [IE下无效,Chorme、Firefox下均属于空白域,无法获取信息,不过可用作CVE攻击]

    0x02 在<script></script>

    直接在script标签里执行的情况,我们通常分为以下几种利用方式:

    • 直接导入远程XSS平台脚本
    • 直接在<></>中写上自定义攻击脚本,如生成img标签

    关于<></>中可用:

    1) 单个拆开编码成ASCII

    eval(String.fromCharCode())
    

    2) 使用eval()执行16进制转换后的代码

    eval(u0064u0078......)
    eval(x64x78......)
    

    0x03 在样式表中的编码

    样式表中可用expression和@import来执行js代码,此方法可进行适当的编码转换。
    PS:仅在IE8.0之前的版本。

    1) expression

    全角字符:
    <div style=xss:expression(alert(1))>
    
    十六进制
    <div style=xss:065xpression(alert(1))>
    
    /**/注释 [Javascript中也行]
    <div sty/**/le=x/**/ss:065xpre/**/ssio/**/n(al/**/ert(1))>
    

    2) @import

    和结束符会被浏览器忽略
    @impo
    t javascript:alert(1)
    @im0port jav0asc000ript:a0lert(1)
    

    浏览器差异

    简单记录常见的浏览器差异造成的XSS

    0x01 引号的差异

    只有IE支持反引号`` `

    0x02 标签的差异

    • data协议执行代码是在Chrome下执行
    • Chrome下srcdoc利用:<iframe srcdoc="&lt;script&gt;alert(1)&lt;/script&gt;"></iframe>
    • IE下<img src=javascript:alert(1)>
    • 只要火狐支持E4X

    0x03 过滤器差异

    Chrome能拦截大多数反射型XSS,Firefox次之,IE最次

    浏览器异常解析BUG产生XSS漏洞

    关于调用document

    在刚开始学习XSS的时候总是想千方百计的想用javascript调用dom对象,比如document.cookie,却不知这个只能在javascript域[伪协议或标签内]范围内。

    小知识点

    一、src等属性在引入时如果漏洞网站协议名于xss平台相同,即可省略去,如:<img src=//www.baidu.com />
    二、svg标签属于xml而不属于html
    三、关于Cors跨域:使用Ajax跨域时默认是不允许带上会话数据的,不过可以在XSS平台通过设置返回的请求头Access-Control-Allow-Credentials: true,并且需要设置xhr的withCreadential属性值为true,注意此时返回的Access-Control-Allow-Origin不能设置为通配符true。
    四、优先级:function xxx(){}形式定义的函数 -> == -> &
    五、使用img等合法标签跨域可以带上会话信息
    六、除javascript外还有vbscript、actionscript等
    七、P3P协议仅仅是IE浏览器支持,通常是Hacker域名通过iframe或script等载入存在XSS漏洞的网站

    与CSRF的区别

    XSS的恶意请求伪造与CSRF极为相似,两者的差别为:

    • 后者发出的伪造请求可为其他站点发出的,而前者都是存在XSS漏洞的站点发出的
    • CSRF是XSS无法替代的
    • CSRF可以无Javascript参与,及在黑客的网站上使用img等标签发送带Cookie(自带)的跨域请求。

    关于XSS防御

    0x01 输出Html标签属性

    如:<input class='xxx' value="{输出}"> 这里的输出如果过滤/转义了",便不存在XSS漏洞了,因为这里的value属性不能执行js代码。

    0x02 输出在注释

    一定要过滤换行符!!

    0x03 输出在样式表

    过滤expression和@import还有外部图片的引用

    0x04 字符集

    开头设定好字符集为 UTF-8

    0x05 Cookie盗取

    设置好path、开启http_only、防止调试信息泄露和Apache400漏洞、使用Session

  • 相关阅读:
    【工具类】图片压缩工具类,可压缩jpg, png等图片
    【Nginx用法】nginx location正则表达式写法,详解Nginx location 匹配规则(很详细哦)
    【Nginx异常】[error] 4236#29900: OpenEvent(“Global gx_reload_27128“) failed (5: Access is denied)
    【Nginx异常】Nginx启动一闪而过没反应,Nginx双击打开后,没有启动成功,也没有进程,且127.0.0.1:8080访问不到
    开启vue-element-ui打包生成报告
    Cas 5.2.x 使用 实现SSO单点登录的问题
    springmvc在使用@ModelAttribute注解获取Request和Response会产生线程并发不安全问题
    企业微信会话存档开发与问题
    高手怎么查找CPU过高的Java代码。具体到行
    ubuntu中清除开始菜单中的应用图标
  • 原文地址:https://www.cnblogs.com/yunen/p/10586696.html
Copyright © 2011-2022 走看看