詳解文件上傳漏洞

介紹

在現代互聯網網站中,上傳文件基本上是一種常見的功能,允許用戶上傳一些圖片,視頻以及其他類型的文件。如果網站出現文件上傳漏洞,那麼惡意用戶就可以將可執行腳本程序上傳到web服務器中,獲得網站權限,進一步 gongji web服務器。
當上傳文件時,如果服務端未對客戶端上傳的文件進行嚴格的驗證和過濾,就容易造成文件上傳漏洞,即上傳任意文件(包括腳本文件php,jsp,asp,aspx等格式)
惡意用戶可以利用上傳的webshell控制整個網站甚至控制服務器

繞過

js檢測繞過
js檢測繞過漏洞常見於用戶上傳文件時,如果後綴不允許,則彈窗告知,此時上傳文件的數據包並沒有上傳到服務端,只是在客戶端瀏覽器使用JavaScript進行檢測
詳解文件上傳漏洞
此時有兩種方法進行繞過
1.使用瀏覽器插件刪除檢測文件後綴的JavaScript代碼,然後上傳文件
2.先把需要上傳的文件後綴改爲允許上傳的後綴繞過JavaScript代碼的檢測,再抓包修改爲原來的後綴即可成功
詳解文件上傳漏洞
詳解文件上傳漏洞
可以看到成功繞過js檢測上傳文件成功
文件後綴繞過
文件後綴繞過是服務端限制了某些後綴的的文件不允許上傳,but 有些Apache是允許解析其它文件後綴的,例如在Apache配置文件httpd.conf中有以下代碼則能夠解析php和phtml文件
AddType application/x-httpd-php .php .phtml


在Apache解析順序中是從右到左開始解析文件後綴的,如果最右側的擴展不識別就繼續往左判斷,直到遇到可以解析的文件後綴爲止,所以如果上傳的文件名類似爲luguo.php.xxx,因爲後綴xxx不可以解析則向左解析爲luguo.php
文件類型繞過
此類繞過需要簡單的兩次判斷
用burp suite抓包
當上傳php文件時
詳解文件上傳漏洞
可以看到數據包中的Conetent-Type的值是application/x-php
上傳jpg文件時
詳解文件上傳漏洞
可以看到數據包中的Content-Type的值是image/jpeg
可以推斷出服務端是通過Content-Type的值來判斷文件的類型,那麼就可以進行繞過了,因爲Content-Type的值是通過客戶端傳遞的,是可以進行修改的,我們只需要在上傳php文件時,在Burp suite中將Content-Type修改爲image/jpeg,就可以繞過檢測
詳解文件上傳漏洞
在php中還有一種文件上傳漏洞,php調用函數getimagesize()獲取圖片長寬高等信息,如果上傳的不是圖片那麼getimagesize()就獲取不到信息則不允許上傳,but 我們可以將圖片和webshell合併成一個文件,敲下方命令
cat index.png luguo.php > snowwolf.php
詳解文件上傳漏洞
詳解文件上傳漏洞
訪問上傳的地址,上傳成功
文件截斷繞過
在php中00代表結束符,所以會把00後面的所有字符刪除
截斷條件php版本小於5.3.4,php的magic_quotes_gpc爲off
詳解文件上傳漏洞
上傳文件時服務端將Get參數name的內容爲文件名的前一部分,後面則按時間生成的圖片爲第二部分
修改參數截斷爲luguo.php%00.ipg,文件保存到服務器時,%00會把.jpg和按時間生成的圖片名全部截斷,文件名就剩下luguo.php,因此成功上傳webshell
競爭條件繞過
一些網站的邏輯是先允許上傳任意文件,然後檢查是否包含webshell腳本,如果包含則刪除。這裏存在的漏洞是文件上傳成功後和刪除操作有個時間差,惡意用戶利用時間差就可以完成競爭條件的gongji。
gongji者先上傳一個webshell腳本snowwolf.php,snowwolf.php是生成一個新的webshell腳本,內容如下
<?php
fputs(fopen('../shell.php','w'),'<?php @eval($_POST[a]) ?>');
?>


當snowwolf.php上傳成功時,gongji者立即訪問snowwolf.php,則會在服務端立即生成shell.php文件,完成gongji
詳解文件上傳漏洞

詳解文件上傳漏洞
可以看到已經生成shell.php文件
ps:單身多年的手速可算派上用場了

修復建議

通過白名單的方式來判斷文件後綴的合法
對用戶上傳的文件重命名

文件上傳漏洞網頁演示源碼鏈接:https://pan.baidu.com/s/1V5b7_FvQjd4yKdaoDbBXCw
提取碼:5i89

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章