初次接觸PHP代碼審計,靠自己的眼神審到第一個垃圾洞還是有點小激動...
執行刪除功能的鏈接:
http://127.0.0.1/bluecms_v1.6_sp1/uploads/admin/database.php?act=del&file_name=test.txt
需要登錄後臺
先分析一下代碼:
act參數:
刪除功能實現代碼:
當act參數爲del時,進行刪除備份文件操作。
有一個$_GET['file_name']參數是用戶輸入,傳給$file_name,這裏只是做了trim()函數處理,去除字符串首尾處的空白字符,並沒有做其他的過濾。
然後下面 BLUE_ROOT.DATA."backup/".$file_name 就是後面要刪除文件的路徑,使用了拼接的方式,它的意思是刪除 主目錄下->data->backup 下的文件
然後 後面就執行unlink($file)操作。
這就是整體的一個思路
但是它沒有對用戶的輸入做過濾,也就是$_GET['file_name']是用戶可控的,這就造成了 ../ 遍歷任意文件刪除了
測試:
我在主目錄下創建了一個測試文件:test.txt
執行刪除的payload:
http://127.0.0.1/bluecms_v1.6_sp1/uploads/admin/database.php?act=del&file_name=../../test.txt
通過../../就可以刪除主目錄下的test.txt文件
通過遍歷就可以刪除任意文件。
因爲實現這個功能的代碼點是 admin 目錄下的 database.php 文件,admin目錄需要管理員權限,所以需要先登錄後臺才能進行遍歷目錄刪除文件