1. 程式人生 > >web安全/滲透測試--31--Json劫持/Json注入

web安全/滲透測試--31--Json劫持/Json注入

1、漏洞描述:

JSON(JavaScript Object Notation)是一種輕量級的資料交換格式。易於人閱讀和編寫。同時也易於機器解析和生成,這種純文字的資料互動方式由於可以天然的在瀏覽器中使用,所以隨著ajax和web業務的發展得到了廣大的發展,各種大型網站都開始使用,包括Yahoo,Google,Tencent,Baidu等等,目前各銀行都有用這種方式來實現資料互動。但是如果這種互動的方式用來傳遞敏感的資料,並且傳輸的時候沒有做太多安全性控制的話將導致安全漏洞,根據敏感資訊的不同導致會導致應用遭受不同級別的攻擊。

2、檢測條件:

已知Web網站應用互動採用json的資料交換或者傳輸。

3、檢測方法

通過抓包分析應用裡的資料互動,我們經常可以發現敏感資訊洩露的情況發生。通常的方式包括,抓取應用的互動,檢視裡面敏感的資料,如果在傳輸的時候沒有安全控制,就可以發現此類漏洞了。主要的危害是對於一些資料敏感的應用會造成較嚴重的攻擊,對於資料不敏感甚至是對第三方公開的應用來說,這類問題基本不算是安全問題,通過在第三方域使用javascript hijacking的方式我們就可以竊取到敏感資料了。一般的exploit程式碼形式如下:

<script> function wooyun_callback(a){alert(a);} </script>  
<script
src="http://www.xxx.com/userdata.php?callback=wooyun_callback">
</script>

4、修復方案

儘量避免跨域的資料傳輸,對於同域的資料傳輸使用xmlhttp的方式作為資料獲取的方式,依賴於javascript在瀏覽器域裡的安全性保護資料。如果是跨域的資料傳輸,必須要對敏感的資料獲取做許可權認證,具體的方式可以包括:

1、referer的來源限制,利用前端referer的不可偽造性來保障請求資料的應用來源於可信的地方,此種方式力度較稀,完全依賴於referer,某些情況下(如存在xss)可能導致被繞過。

2、token的加入,嚴格來說,這種利用javascript hijacking的方式獲取資料是CSRF的一種,不過較之傳統的CSRF不能獲取資料只能提交而言,這種方式利用javascript可以獲取一些敏感資訊而已。如果我們能讓攻擊者對介面未知,就可以實現json hijacking的防禦了。利用token對呼叫者的身份進行認證,這種方式對於呼叫者的身份會要求力度較細,但是一旦出現xss也可能導致前端Token的洩露,從而導致保護失效。

3、對於同域的json使用情況下,可以在資料的輸出頭部加入while(1);的方式避免資料被script。