看到了一個總結上傳漏洞的靶場感受不錯,記錄一下過程。項目地址 https://github.com/c0ny1/upload-labsphp
當我搭建好環境,準備開始第一關時,小z看了我屏幕一眼說你這樣很危險啊。我還沒明白怎麼回事,他看了下個人局域網IP地址,直接在他電腦上就能訪問我搭建的項目。而後上傳了一句話,用菜刀鏈接就能訪問了。原來搭建環境時,apache默認開啓了80端口,使得局域網內都能訪問。在入站規則裏添加一條禁止80端口訪問便可。html
前端繞過,可禁用js,也可抓包修改。前端
上傳寫好的a.jpg抓包修改爲a.php 繞過成功。git
Content-Type繞過,可上傳php文件抓包修改 Content-Type: image/jpeg 便可,或者利用Pass-01的方式也可繞過。github
看源碼是黑名單繞過,能夠看下apache能解析php類型有哪些apache
能夠看到能解析的有.php3 .phtml 嘗試上傳圖片把後綴名改成php3 windows
根據返回的結果看到後綴名已經發生了改變,而後鏈接發現可以訪問,繞過成功。app
看源碼發現也是黑名單並且比上一關要多不少後綴名,可是沒有禁止上傳.htaccess文件,這樣就能夠指定特殊文件名或者文件以特定的方式解析。post
<FilesMatch "abcde.*"> SetHandler application/x-httpd-php </FilesMatch>
將上面寫入.htaccess文件,凡是以abcde(能夠隨便改)開頭命名的文件都以php解析,構造好一張圖片命名爲abcdef.jpg 。url
先上傳.htaccess文件,再上傳構造好的文件,不用抓包修改,直接鏈接就可訪問。
這一關看源碼發現把.htaccess也加入了黑名單,可是發現比以前少了大小寫繞過。刪除了把文件名變成小寫,可用大寫繞過。
構造好圖片命名爲a.jpg,上傳文件,抓包並把文件名改成a.PHP 上傳成功後發現可以訪問並鏈接。
看源碼依舊是黑名單處理,相比以前少了首尾去空處理,能夠在後綴名後面加空格繞過,由於windows下會自動去除後綴名後面的點和空格。
根據返回結果上傳成功。
看源碼發現沒有作去處理後綴名後面的點,可利用後綴名加點繞過。
上傳成功,且能鏈接訪問。
看源碼發現少了去除::$DATA處理。php在Windows下文件名+::$DATA 會和後面的數據做爲文件流處理,且不檢測前面的後綴名。可利用這一特性繞過。
返回的狀態碼是403,可是可以上傳成功,且可以鏈接訪問。
看源碼發現對後綴名的處理是先trim去空格再deldot去點,上傳時路徑拼接的是$file_name 故能夠構造a.php. .(點空格點)繞過,處理後文件名變成a.php. 結合Windows特性變成了a.php
看源碼str_ireplace:替換字符串中的一些字符(不區分大小寫)能夠利用雙拼繞過。
這關開始用了白名單,看源碼路徑可控用%00截斷。php版本要在小於5.3.4 。
此次用post獲取路徑,不會像get那樣自動url解碼,在hex裏改爲00,也能夠加%00而後右鍵url decode
待續