JSON劫持攻擊[匯總]

JSON 劫持又為“ JSON Hijacking ”低匙,最開(kāi)始提出這個(gè)概念大概是在 2008 年國(guó)外有安全研究人員提到這個(gè) JSONP 帶來(lái)的風(fēng)險(xiǎn)。其實(shí)這個(gè)問(wèn)題屬于 CSRF( Cross-site request forgery 跨站請(qǐng)求偽造)攻擊范疇浦辨。當(dāng)某網(wǎng)站聽(tīng)過(guò) JSONP 的方式來(lái)快域(一般為子域)傳遞用戶認(rèn)證后的敏感信息時(shí),攻擊者可以構(gòu)造惡意的 JSONP 調(diào)用頁(yè)面,誘導(dǎo)被攻擊者訪問(wèn)來(lái)達(dá)到截取用戶敏感信息的目的样勃。

漏洞原理

JSON實(shí)際應(yīng)用的時(shí)候會(huì)有兩種傳輸數(shù)據(jù)的方式:

xmlhttp獲取數(shù)據(jù)方式:

{"username":"wooyun","password":"wooyun"}

當(dāng)在前端獲取數(shù)據(jù)的時(shí)候,由于數(shù)據(jù)獲取方和數(shù)據(jù)提供方屬于同一個(gè)域下面性芬,所以可以使用 xmlhttp的方式來(lái)獲取數(shù)據(jù)峡眶,然后再用xmlhttp獲取到的數(shù)據(jù)傳入自己的js邏輯如eval。

script獲取數(shù)據(jù)方式:

userinfo={"username":"wooyun","password":"wooyun"}

如果傳輸?shù)臄?shù)據(jù)在兩個(gè)不同的域,由于在javascript里無(wú)法跨域獲取數(shù)據(jù),所以一般采取script標(biāo)簽的方式獲取數(shù)據(jù)弧满,傳入一些callback來(lái)獲取最終的數(shù)據(jù),這就有可能造成敏感信息被劫持狮暑。

所以,總的來(lái)說(shuō)就是網(wǎng)站以JSON形式輸出數(shù)據(jù)辉饱,且其中包含用戶敏感信息心例,攻擊者通過(guò)第三方站點(diǎn)以CSRF手段使用戶瀏覽器請(qǐng)求目標(biāo)站點(diǎn)得到包含敏感信息的JSON數(shù)據(jù),進(jìn)而劫持到敏感信息鞋囊。

json劫持

json劫持攻擊又為”JSON Hijacking”止后,攻擊過(guò)程有點(diǎn)類似于csrf,只不過(guò)csrf只管發(fā)送http請(qǐng)求溜腐,但是json-hijack的目的是獲取敏感數(shù)據(jù)译株。

一些web應(yīng)用會(huì)把一些敏感數(shù)據(jù)以json的形式返回到前端,如果僅僅通過(guò)cookie來(lái)判斷請(qǐng)求是否合法挺益,那么就可以利用類似csrf的手段歉糜,向目標(biāo)服務(wù)器發(fā)送請(qǐng)求,以獲得敏感數(shù)據(jù)望众。

比如下面的鏈接在已登錄的情況下會(huì)返回json格式的用戶信息:

http://www.test.com/userinfo

攻擊者可以在自己的虛假頁(yè)面中匪补,加入如下標(biāo)簽:

如果當(dāng)前瀏覽器已經(jīng)登錄了www.test.com,并且cookie未過(guò)期烂翰,然后訪問(wèn)了攻擊者的虛假頁(yè)面夯缺,那么該頁(yè)面就可以拿到j(luò)son形式的用戶敏感信息,因?yàn)閟cript標(biāo)簽會(huì)自動(dòng)解析json數(shù)據(jù)甘耿,生成對(duì)應(yīng)的js對(duì)象踊兜。然后再通過(guò)

Object.prototype.__defineSetter__

這個(gè)函數(shù)來(lái)觸發(fā)自己的惡意代碼。

但是這個(gè)函數(shù)在當(dāng)前的新版本chrome和firefox中都已經(jīng)失效了佳恬。

jsonp劫持

Jsonp(json with padding)是基于 JSON 格式的為處理跨域請(qǐng)求資源而產(chǎn)生的處理方案捏境,遠(yuǎn)程調(diào)使用 JSON 文件來(lái)實(shí)現(xiàn)數(shù)據(jù)傳遞于游。利用script元素的開(kāi)放策略,網(wǎng)頁(yè)可以得到從其他來(lái)源動(dòng)態(tài)產(chǎn)生的json數(shù)據(jù)垫言,因此可以用來(lái)實(shí)現(xiàn)跨域贰剥。

舉一個(gè)例子


$callback = $_GET['callback'];

print $callback . '({"id" : "1","name" : "小明"});';

?>

這里出現(xiàn)了callback他的作使用就是回調(diào)我們的json。

web程序如果通過(guò)這種方式跨域之后筷频,攻擊者完全可以在自己的虛假頁(yè)面中發(fā)起惡意的jsonp請(qǐng)求蚌成,這就引來(lái)了安全問(wèn)題。比如:

function useUserInfo(v){

alert(v.username);

}

如果服務(wù)器端的userinfo接口支持jsonp截驮,那就會(huì)使虛假頁(yè)面成功執(zhí)行useUserInfo函數(shù)笑陈,從而導(dǎo)致安全問(wèn)題际度。

json劫持的挖掘過(guò)程的referer繞過(guò)機(jī)制葵袭。

正則不嚴(yán)謹(jǐn)

如正常請(qǐng)求的referer:www.123.com

我們修改為referer

只要要攻擊者利使用時(shí)注冊(cè)相應(yīng)的域名即可以繞過(guò)

空referer

這里直接刪去referer是最簡(jiǎn)單的一個(gè)

jsonp接口漏洞挖掘

相關(guān)的介紹就不細(xì)細(xì)道來(lái)了,其實(shí)原理也就是JSONP實(shí)際上是使用script方式獲取Javascript代碼乖菱,進(jìn)而執(zhí)行坡锡,因此可以在我們自己的頁(yè)面中,使用JSONP獲取數(shù)據(jù)窒所,并使用Javascript Hook的方式鹉勒,讓其執(zhí)行我們自定義的回調(diào)函數(shù),獲取敏感信息吵取。

需要滿足的條件:

使用JSONP獲取數(shù)據(jù)禽额;

未檢測(cè) referer或者驗(yàn)證了 referer,但是驗(yàn)證方式不嚴(yán)謹(jǐn)皮官,如需要驗(yàn)證的 referer 為?www.xxx.com?域脯倒,但是?www.xxx.com.mydomain.com?同樣能夠繞過(guò);

GET請(qǐng)求中不包含token相關(guān)的參數(shù)

如何挖掘這樣的接口呢捺氢?我們可以使用Fiddler藻丢、burpsuite或者F12等方法去一個(gè)個(gè)檢查,但這樣豈不是要累死人了……

更輕松的方式:自動(dòng)化測(cè)試工具Selenium + Proxy + 驗(yàn)證腳本

(1)Selenium:可用于自動(dòng)化對(duì)網(wǎng)頁(yè)進(jìn)行測(cè)試摄乒,“到處”點(diǎn)擊按鈕悠反、超鏈接,以期待測(cè)試更多的接口馍佑;

(2)Proxy:用于代理所有的請(qǐng)求斋否,過(guò)濾出所有包含敏感信息的JSONP請(qǐng)求,并記錄下HTTP請(qǐng)求拭荤;

(3)驗(yàn)證腳本:使用上述的HTTP請(qǐng)求如叼,剔除referer字段,再次發(fā)出請(qǐng)求穷劈,測(cè)試返回結(jié)果中笼恰,是否仍包敏感信息踊沸,如果有敏感信息,說(shuō)明這個(gè)接口就是我們要找的社证!

測(cè)試:

使用腳本進(jìn)行測(cè)試逼龟,我以sina為例,首先需要登錄sina帳號(hào)追葡,微博或者博客都可以腺律,然后開(kāi)啟瀏覽器代理,運(yùn)行我們的腳本宜肉,最后瀏覽網(wǎng)頁(yè)匀钧,就能檢測(cè)出這樣的JSONP接口了


至此發(fā)現(xiàn)該JSONP接口,簡(jiǎn)單寫(xiě)兩句JS代碼放到我們的網(wǎng)站上:

$.ajax({

url: 'https://api.weibo.com/2/{隱藏了哦}',

type: 'get',

dataType: 'jsonp',

}).done(function(json){

var id = json["data"]["id"];

var screen_name = json["data"]["screen_name"];

var profile_image_url = json["data"]["profile_image_url"];

var post_data = "";

post_data += "id=" + id + "&";

post_data += "screen_name=" + screen_name + "&";

post_data += "profile_image_url=" + encodeURIComponent(profile_image_url);

console.log(post_data);

// 發(fā)送到我的服務(wù)器上

}).fail(function() {});

很快就可以收到大波的用戶信息了

相關(guān)的代碼放到了Github上,https://github.com/qiaofei32/jsonp_info_leak

漏洞危害

JSON劫持主要能夠造成的危害大概有這么幾類:

  1. 可能導(dǎo)致用戶權(quán)限被盜用;

  攻擊者通過(guò)JSON劫持構(gòu)造盜取管理員或高權(quán)限用戶的腳本谬返,一旦被訪問(wèn)之斯,權(quán)限立即被盜用。

  2. 可以通過(guò)劫持對(duì)網(wǎng)頁(yè)進(jìn)行掛馬;

  在JSON劫持點(diǎn)構(gòu)造引向漏洞后門(mén)木馬遣铝,但訪問(wèn)直接利用漏洞批量掛馬佑刷。

  3. 可對(duì)劫持頁(yè)進(jìn)行網(wǎng)站釣魚(yú);

  利用JSON劫持直接導(dǎo)向偽裝網(wǎng)站地址。

  4. 可做提權(quán)攻擊;

  5. 變種拒絕服務(wù)攻擊;

  劫持后將流量導(dǎo)向受害網(wǎng)站酿炸,直接發(fā)動(dòng)DDOS攻擊瘫絮。

解決方法

其實(shí)json劫持和jsonp劫持屬于CSRF( Cross-site request forgery 跨站請(qǐng)求偽造)的攻擊范疇,所以解決的方法和解決csrf的方法一樣填硕。

驗(yàn)證 HTTP Referer 頭信息麦萤;

在請(qǐng)求中添加 csrfToken 并在后端進(jìn)行驗(yàn)證;

參考地址:

https://blog.csdn.net/mgxcool/article/details/73028337

http://www.mottoin.com/article/web/95682.html

http://www.mottoin.com/article/web/88237.html

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末扁眯,一起剝皮案震驚了整個(gè)濱河市壮莹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌恋拍,老刑警劉巖垛孔,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異施敢,居然都是意外死亡周荐,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)僵娃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)概作,“玉大人,你說(shuō)我怎么就攤上這事默怨⊙堕牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)愚屁。 經(jīng)常有香客問(wèn)我济竹,道長(zhǎng),這世上最難降的妖魔是什么霎槐? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任送浊,我火速辦了婚禮,結(jié)果婚禮上丘跌,老公的妹妹穿的比我還像新娘袭景。我一直安慰自己,他們只是感情好闭树,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布耸棒。 她就那樣靜靜地躺著,像睡著了一般报辱。 火紅的嫁衣襯著肌膚如雪与殃。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,549評(píng)論 1 312
  • 那天捏肢,我揣著相機(jī)與錄音奈籽,去河邊找鬼饥侵。 笑死鸵赫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躏升。 我是一名探鬼主播辩棒,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膨疏!你這毒婦竟也來(lái)了一睁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤佃却,失蹤者是張志新(化名)和其女友劉穎者吁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體饲帅,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡复凳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了灶泵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片育八。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖赦邻,靈堂內(nèi)的尸體忽然破棺而出髓棋,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布按声,位于F島的核電站膳犹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏签则。R本人自食惡果不足惜镣奋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望怀愧。 院中可真熱鬧侨颈,春花似錦、人聲如沸芯义。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扛拨。三九已至耘分,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間绑警,已是汗流浹背求泰。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留计盒,地道東北人渴频。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像北启,于是被迫代替她去往敵國(guó)和親卜朗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

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