0x01
CSRF攻擊方式
一:HTML csrf攻擊:
- 利用HTML元素發(fā)出GET請(qǐng)求
帶src屬性的html標(biāo)簽都可以跨域發(fā)起GET請(qǐng)求
- <link href="…">
- <img src="…">
- <iframe src="…">
- <meta http-equiv="refresh" content="0; url=…">
- <script src="…">
- <video src="…">
- <audio src="…">
- <a href="…">
- <table background="…">....................
- POST請(qǐng)求攻擊
需用表單提交方式,標(biāo)簽可由js動(dòng)態(tài)生成
<script>
new Image().src = 'http://www.goal.com/…';
</script>
二. JSON Hijacking攻擊
JSONP:是Web前端的JavaScript跨域獲取數(shù)據(jù)的一種方式。
基本原理是利用了 HTML 里 <script></script> 元素標(biāo)簽,遠(yuǎn)程調(diào)用 JSON 文件來(lái)實(shí)現(xiàn)數(shù)據(jù)傳遞。如要在 a.com 域下獲取存在 b.com 的 JSON 數(shù)據(jù)
當(dāng)用戶通過(guò)身份認(rèn)證之后,前端會(huì)通過(guò)jsonp的方式從服務(wù)端獲取該用戶的隱私數(shù)據(jù),然后在前端進(jìn)行一些處理,如個(gè)性化顯示等,這個(gè)jsonp的調(diào)用接口如果沒(méi)有做相應(yīng)的防護(hù),就容易受到JSON劫持攻擊
條件:這個(gè)JSON劫持漏洞需要你暴露出JSON服務(wù)(指JSON服務(wù)地址被攻擊者知道)并且進(jìn)行如下操作:
- 返回敏感的數(shù)據(jù)
- 返回一個(gè)JSON數(shù)組
- 響應(yīng)一個(gè)GET請(qǐng)求
- 發(fā)送請(qǐng)求的瀏覽器啟用了JavaScript(很有可能)
- 發(fā)送請(qǐng)求的瀏覽器支持defineSetter方法
關(guān)于某些情形下的繞過(guò)
-
有種防御方案是驗(yàn)證json文件調(diào)用的來(lái)(referer),主要利用了 <script> 遠(yuǎn)程加載 JSON 文件時(shí)會(huì)發(fā)送 Referer ,在網(wǎng)站輸出 JSON 數(shù)據(jù)時(shí)判斷 Referer 是不是白名單合法的就可以進(jìn)行防御。
-
Referer過(guò)濾不嚴(yán)謹(jǐn)以及空Rerferer
空情形:通過(guò)跨協(xié)議調(diào)用js時(shí)發(fā)送到http請(qǐng)求里為空referer eg:
可使用<iframe>調(diào)用js偽協(xié)議來(lái)實(shí)現(xiàn)空referer
- 隨機(jī)token:某些token可以暴力循環(huán)破解
-
更多的是組合攻擊 callback可定義導(dǎo)致安全問(wèn)題
-
Content-Type 與xss漏洞
callback未進(jìn)行過(guò)濾
直接就能導(dǎo)致xss漏洞
0x02
實(shí)例:
一:利用html元素發(fā)出get請(qǐng)求
以DVWA(medium)為例:
在用戶登路狀態(tài)下可更改密碼,進(jìn)行修改操作時(shí)還檢測(cè)了referer參數(shù),抓包在referer參數(shù)中可發(fā)現(xiàn)ip地址(這里是本地),在構(gòu)造csrf網(wǎng)頁(yè)時(shí)所包含的referer信息包含被攻擊ip

構(gòu)造網(wǎng)頁(yè)

引誘自己訪問(wèn)=-=便可成功修改掉密碼
二:復(fù)現(xiàn):POST(phpok4.2.100添加管理員)
本地部署了phpok后進(jìn)入后臺(tái)可查看編輯管理員:

編輯網(wǎng)頁(yè)

在管理員登錄的狀態(tài)下誘導(dǎo)其訪問(wèn)該頁(yè)面

成功添加一名管理員
之后使用添加的系統(tǒng)管理員身份登錄后臺(tái),風(fēng)格管理中添加模板文件

抓包修改后綴為.php上傳成功,并且頁(yè)面顯示了文件夾路徑


在后臺(tái)找到文件并編輯成木馬文件即可getshell

0x03
關(guān)于防御
- 驗(yàn)證Referer;
有些請(qǐng)求不需要referer
- 使用驗(yàn)證碼;
影響用戶體驗(yàn)
- 使用CSRF token;
隨機(jī)性不夠好或通過(guò)各種方式泄露,此外,在大型的服務(wù)中需要一臺(tái)token生成及校驗(yàn)的專(zhuān)用服務(wù)器,需要更改所有表單添加的字段,有時(shí)效性的問(wèn)題。
- 限制Session生命周期。
緩解csrf。只是降低csrf攻擊成功率
- 一個(gè)看不懂的新方法。
當(dāng)表單提交時(shí),用JavaScript在本域添加一個(gè)臨時(shí)的Cookie字段,并將過(guò)期時(shí)間設(shè)為1秒之后在提交,服務(wù)端校驗(yàn)有這個(gè)字段即放行,沒(méi)有則認(rèn)為是CSRF攻擊。
token之所以可以防御CSRF,是因?yàn)楣粽邿o(wú)法使用JavaScript獲取外域頁(yè)面中的token值,必須要遵守同源策略;而臨時(shí)Cookie的原理是:Cookie只能在父域和子域之間設(shè)置,也遵守同源策略,攻擊者無(wú)法設(shè)置該Cookie
eg:復(fù)現(xiàn)的簡(jiǎn)單demo:

前端test.html頁(yè)面中有三個(gè)按鈕:第一個(gè)是正常的表單提交;第二個(gè)是添加臨時(shí)Cookie后提交表單;第三個(gè)是以hook submit事件來(lái)添加臨時(shí)Cookie并提交
服務(wù)端

執(zhí)行normal看到只有xampp設(shè)置的一個(gè)cookie

而執(zhí)行后兩個(gè),則可看到添加的臨時(shí)cookie

但由于這種防御策略還沒(méi)有被大規(guī)模使用,所以無(wú)法確定其是否真實(shí)有效。所以我也不去研究啦
JSON HIJACKING的防御:
1、限制 Referer 、部署一次性 Token 等。
2、按照J(rèn)SON 格式標(biāo)準(zhǔn)輸出 Content-Type 及編碼( Content-Type : application/json; charset=utf-8 )。
3、過(guò)濾 callback 函數(shù)名及 JSON 里數(shù)據(jù)的輸出。
4、限制對(duì) JSONP 輸出 callback 函數(shù)名的長(zhǎng)度
5、在 Callback 輸出之前加入其他字符(如:/**/、回車(chē)換行)這樣不影響 JSON 文件加載,又能一定程度預(yù)防其他文件格式的輸出。
以及 Gmail 早起使用 AJAX 的方式獲取 JSON ,聽(tīng)過(guò)在輸出 JSON 之前加入 while(1) ;這樣的代碼來(lái)防止 JS 遠(yuǎn)程調(diào)用。
0x04
CSRF蠕蟲(chóng)
基于它的傳播性,需要獲取每個(gè)用戶的請(qǐng)求參數(shù)數(shù)據(jù)
- 利用服務(wù)端腳本
- json 劫持
啊這個(gè)我還不知道怎么復(fù)現(xiàn),還得學(xué)習(xí)學(xué)習(xí)=-=
0x05
Flash與Actionscript一點(diǎn)點(diǎn)問(wèn)題
有一個(gè)通常在網(wǎng)站根目錄存在的文件crossdomain.xml。
該配置文件中的“allow-access-from domain”用來(lái)配置哪些域的Flash請(qǐng)求可以訪問(wèn)本域的資源。如果該項(xiàng)值為“*”,則表示任何與的Flash都可以訪問(wèn)。當(dāng)存在這樣的配置時(shí),攻擊者可以利用ActionScript腳本輕松突破同源策略的限制。


