iT邦幫忙

2021 iThome 鐵人賽

DAY 25
0
Security

讓Web開發者森77的Hacking Trick系列 第 25

[Day25] JSON Injection

正文

概念

JSON 是一個以純文字為基礎去生成的簡單結構,可以很簡單的與其他應用程式交換資料、傳遞訊息。但若是讓未經驗證的input在應用程式中執行,就會引發很多嚴重後果,因為這讓攻擊者可以將惡意內容注入JSON的實體。

由於JSON用於傳遞資料時,常會包含敏感資訊,例如驗證憑證。一個簡單的範例如下:

一個可以瀏覽其他用戶頁面的網站具有JSON Injection漏洞,當一個普通用戶瀏覽另一名用戶的頁面時,Response如下:

{
"user": "Craig",
"description" : "Hi I'm Craig."
}

而網站在解析這段Json時使用eval直接拿取,而且不經過任何檢查:

var userData = eval("(" + res + ")");
document.getElementById("#user").innerText = data.user;
document.getElementById("#description").innerText = data.description;

這時候若是一個惡意用戶,在寫description欄位的時候,插入一段惡意的javascript:
Hi I'm Craig."});alert("XSS");({"name":"Craig","description":" Hi I'm Craig."
就可以在普通用戶瀏覽此頁面時,談出一個XSS字樣的視窗,也可以寫入其他更惡意的程式碼,使一般使用者被route到惡意頁面,或是導致cookie被竊取。

而依據網站應用程式的功能不同,引發的危害也有所高低,如若應用程式接收在JSON中的SQL查詢,則可能引發SQL Injection,除此之外,各種之前提過的Injection、上傳漏洞、LFI等等也都有機會觸發。

因此JSON Injection更像是一個攻擊面,若是更底層邏輯的應用程式信任來自JSON所傳遞的資料,而上層的應用程式在parse JSON時又沒有做適當的檢查或過濾時,就很容易引發漏洞。

Case Study

參考:
CVE-2021-40099

Improperly validated fields allows injection of arbitrary HTML via spoofed React objects


上一篇
[Day24] Bind Shell / Reverse Shell
下一篇
[Day26] Business Logic Vulnerabilities - 商業邏輯漏洞
系列文
讓Web開發者森77的Hacking Trick30

尚未有邦友留言

立即登入留言