記錄一下文件上傳的常見姿勢,更全面的可以做upload-labs。
實驗環境:win2003 phpstudy
實驗平台:upfile
一、准備上傳的一句話木馬
eval函數將接受的字符串當做代碼執行
二、實驗步驟
2.1 無防護上傳
可以直接上傳一句話木馬文件
可以看到已經成功上傳,並返回了相關信息。
可以使用菜刀連接
實際上權限已經有很多,但是也可以用一句話木馬上傳大馬進行其他操作。
2.2 前台腳本檢測擴展名
這里增加在前端增加了限制,如果直接上傳php文件會被拒絕
可以先把文件改成允許上傳的格式,比如jpg格式,
然后進行抓包,通過前端的檢測之后再進行改包:
這樣上傳成功了,再通過工具連接:
2.3 服務器驗證Content-type檢測文件類型
這樣直接上傳也是不能通過的:
因為檢測的地方是Content-type,所以抓包替換成可以上傳的type就可以了:
可以看到,文件本身沒有變化,但是最后也成功上傳了。
2.4 服務器端驗證文件擴展名
這樣后端進行驗證,利用辦法是修改文件上傳的擴展名,結合解析漏洞利用。
首先對上傳的php文件進行抓包:
最后修改不再黑名單內的擴展名。成功上傳,但是要配合阿帕奇的解析漏洞(2.0-2.2版本),否則不能執行成php文件
也可以根據情況使用00截斷(這里是舉例記錄):
首先文件改名為1.phpp.jpg
然后上傳時候進行抓包:
把phpp的第二個p的16進制改成00,這樣p就變成了空格
這樣上傳成功后變成了1.php空.jpg
這樣就能執行php文件,但是這樣上傳的時候如果后端用函數也檢測到時php文件,那么也上傳不成功,所以根據情況利用。
2.5 服務端驗證圖片文件頭
這種防護方式會對文件內容進行檢測:
如果只是修改文件的擴展名,也是不能繞過檢測,所以這時候利用的方式就是用真的圖片加上一句話木馬構造成圖片馬上傳(可以直接txt格式打開圖片或者利用命令行),然后再根據場景把圖片還原成php文件進行執行。