iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 29
1
Security

新手眼中的資安系列 第 29

[Day29]- 新手的Web系列JSON Injection 0x2

  • 分享至 

  • xImage
  •  

Day29- 新手的Web系列JSON Injection 0x2

正文

  • web2.0導入了很多Ajax和JSON的技術,透過非同步載入資料的方式提供了更多應用功能
  • JSON是Javascript的子集合,所以也能用eval()函數來讀取資料
  • eval()函數的危險:
    • 在Javascript裡面,如果使用的不好,很容易把JSON轉換成Javascript物件,這時候如果JSON資料包含惡意程式時,就會導致安全問題
    • eval()函數是可以直接執行語法的,所以如果被惡意使用者看見,有可能可以任意執行語法導致 RCE

小範例

  • 偽造攻擊腳本:
    • name:<img src=javascript:alert(1)>
  • 交給伺服器時的資料格式:
    • var test = {name:$name}
  • 受害者打開攻擊者的惡意JSON位置:
    • var test = {name:<img src=javascript:alert(1)>}
  • alert(1) 被受害者的瀏覽器解讀並執行
  • 由上述可以知道,JSON注入是可以產生XSS的

callback

  • JSON檔被載入完後會呼叫一個特別函數,該函數會以JSON資料做為參數
  • 假設有一個網站允許任何人用javascript來連結網站資訊,JSON會需要提供一個回叫名稱
  • 例如:
  • 連結id=20 的 profile
    • 發送GET請求
    • http://mac**on.com/Getprofile.html?callback=profileCallback&id=20
    • 伺服器回傳
    • profileCallback({"profile":[{"name":"macaron","age":21}]})

小範例

  • 攻擊者目標網站:macaron.com
  • 資料網站:data.macaron.com
  • 使用者端程式碼:
<div class="test">
<script>
function profileCallback(result){
document.write(result.profile[0].name);
document.write(result.profile[0].age);
}
</script>
<script src = "http://data.mac**on.com/Getprofile.html?callback=profileCallback&id=20" 
src = "text/javascript">
</script>
</div>
  • 使用者前端這段程式碼是允許跨域連結data.mac**on.com,把輸出資料作為參數傳遞給profileCallback,透過呼叫介面,得出:

    • macaron 21
  • 問題是 data.mac**on.com 未做任何驗證的情況下,使用了第三方不可信的JSON資料,這樣就會把終端使用者的資訊透露出來,而且當網站將使用者要連結的資料注入惡意javascript程式碼,那有可能會受到XSS攻擊

  • 例如:

profileCallback(
{"profile":[
{
"name":"macaron","age":"<script>alert('haha');</script>"
}
]
})

上一篇
[Day28]- 新手的Web系列JSON Injection 0x1
下一篇
[Day30]- 新手的CTF系列picoCTF 2019
系列文
新手眼中的資安30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言