0x01 文件上傳漏洞
文件上傳漏洞顧名思義就是用戶上傳一個可執(zhí)行的腳本文件须床,獲得了執(zhí)行服務(wù)器端命令的能力。通常噪叙,文件上傳是getshell最常用矮锈、最直接的方式了。但是睁蕾,文件上傳本身是一個正常的業(yè)務(wù)需求苞笨,因此問題在于如何安全的上傳。
0x02 文件上傳的觸發(fā)條件
上傳的文件被Web容器解釋執(zhí)行
用戶能夠從web頁面訪問到被上傳的文件(直接或間接)
用戶上傳的文件通常不能被網(wǎng)站程序壓縮惫霸、修改內(nèi)容
0x03 從防御的角度看上傳
通常防御文件上傳漏洞是分幾個點的猫缭,大體上就以下幾方面
1. 客戶端javascript校驗
在瀏覽加載文件,但還未點擊上傳按鈕時變彈出對話框壹店,內(nèi)容可能是“只允許上傳xxx后綴名的文件”之類的猜丹,而此時并沒有發(fā)送數(shù)據(jù)包。
繞過方法:
- 關(guān)閉瀏覽器的javascript功能
- 用burp抓包改后綴名
2. 檢測MIME 類型
· 客戶端判斷:
$_FILES['myfile']['type'] == 'image/jpeg'
· 服務(wù)端判斷:
$fileinfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($fileinfo, $file_true_name);
繞過方法:
- 用burp抓包硅卢,修改Content-Type
3. 檢查內(nèi)容
服務(wù)器端會讀取上傳的文件然后判斷文件內(nèi)容時候有<?php之類的
繞過方法:
<script language="php">eval($_POST['cmd']);</script>
- 如果檢查文件頭的話就就可以找張真正的圖片然后用winhex在圖片的末尾寫php代碼
4. 檢查文件擴展名
一般檢查文件擴展名為最直接有效的方法射窒,通常是基于白名單或者黑名單來實現(xiàn)的藏杖。
黑名單繞過
- 可以使用能夠被解析的其他文件擴展名
jsp jspx jspf
asp asa cer aspx
php phtml php3 php4 php5 PHP phtm
exe exee
特殊文件名繞過
比如在上傳的時候改成test.asp.或者test.asp_(下劃線為空格,這里方便大家看用下劃線表示了)脉顿,這種命名方式在windows下是不允許的蝌麸,繞過驗證后windows系統(tǒng)自動去掉后面的點和空格,但要注意Unix/Linux是沒有這個特性的艾疟。00截斷
有的時候可能會遇到服務(wù)器端把后綴名已經(jīng)定好了来吩,而恰好別的地方有一個可以任意讀取php文件的服務(wù),這個時候可以把圖片馬上傳后在這里查看蔽莱,查看的時候用%00把后面的.php給截斷就好了.htaccess文件攻擊
配合名單列表繞過弟疆,上傳一個自定義.htaccess文件,即可輕松繞過各種檢測盗冷。解析漏洞繞過
這類漏洞直接配合上傳一個代碼注入過的非黑名單文件即可怠苔,再利用解析漏洞即可
白名單繞過
%00截斷
跟之前說的很像,就是上傳一個比如shell.php%00.jpg仪糖,服務(wù)器檢測后綴名是.jpg柑司,但實際上已經(jīng)被截斷了。解析漏洞利用
這類漏洞直接配合上傳一個代碼注入過的白名單文件即可锅劝,再利用解析漏洞.htaccess文件攻擊
配合名單列表繞過攒驰,上傳一個自定義.htaccess文件,即可輕松繞過
0x04 與文件上傳息息相關(guān)的解析漏洞
- IIS5.x-6.x解析漏洞
?使用iis5.x-6.x版本的服務(wù)器鸠天,大多為windowsserver2003讼育,網(wǎng)站比較古老帐姻,開發(fā)語句一般為asp稠集;該解析漏洞也只能解析asp文件,而不能解析aspx文件饥瓷。
?目錄解析(IIS6.0)剥纷,只要文件夾有asp的話,該目錄下所有文件都會當作asp來解析呢铆,www.xxx.com/xx.asp/xx.jpg(xx.asp要存在)
?www.xxx.com/xx.asp;.jpg服務(wù)器默認不解析;號后面的內(nèi)容晦鞋,因此xx.asp;.jpg便被解析成asp文件了。(xx.asp;.jpg為上傳文件)
- IIS的PUT上傳
?PUT是在WebDav中定義的一個方法棺克,允許用戶上傳文件到指定目錄悠垛。
?在許多WebServer中都默認禁用了此方法,或者對上傳做了嚴格限制娜谊。但在IIS中确买,如果目錄支持寫權(quán)限,同時開啟了WebDav纱皆,就會支持PUT湾趾,再結(jié)合MOVE方法芭商,可Getshell。
- apache解析漏洞
?Apache解析文件的規(guī)則是從右到左開始判斷解析,如果后綴名為不可識別文件解析,就再往左判斷搀缠。比如test.php.owf.rar“.owf”和”.rar”這兩種后綴是apache不可識別解析,apache就會把test.php.owf.rar解析成php?www.xxxx.xxx.com/test.php.php123
?Apache的httpd.conf的AddHandler php5-script .php這時只要文件名里包含.php即使文件名是test2.php.jpg也會以php來執(zhí)行铛楣。(配置錯誤)
- nginx解析漏洞(Nginx<8.03)
?當cgi.fix_pathinfo開啟時(為1)
?當訪問www.xx.com/phpinfo.jpg/1.php時,會將phpinfo.jpg當做php進行解析
?其中1.php是一個不存在的文件
0x06 參考
某大佬的PPT
文件上傳框架