【文件上傳】PHP文件上傳漏洞

0x01 文件上傳漏洞

文件上傳漏洞顧名思義就是用戶上傳一個可執(zhí)行的腳本文件,獲得了執(zhí)行服務器端命令的能力。通常,文件上傳是getshell最常用、最直接的方式了。但是,文件上傳本身是一個正常的業(yè)務需求,因此問題在于如何安全的上傳。

0x02 文件上傳的觸發(fā)條件

  1. 上傳的文件被Web容器解釋執(zhí)行

  2. 用戶能夠從web頁面訪問到被上傳的文件(直接或間接)

  3. 用戶上傳的文件通常不能被網站程序壓縮、修改內容

0x03 從防御的角度看上傳

通常防御文件上傳漏洞是分幾個點的,大體上就以下幾方面

1. 客戶端javascript校驗

在瀏覽加載文件,但還未點擊上傳按鈕時變彈出對話框,內容可能是“只允許上傳xxx后綴名的文件”之類的,而此時并沒有發(fā)送數據包。

繞過方法:

  1. 關閉瀏覽器的javascript功能
  2. 用burp抓包改后綴名

2. 檢測MIME 類型

· 客戶端判斷:
$_FILES['myfile']['type'] == 'image/jpeg'

· 服務端判斷:

$fileinfo = finfo_open(FILEINFO_MIME);
$mimetype = finfo_file($fileinfo, $file_true_name);

繞過方法:

  1. 用burp抓包,修改Content-Type

3. 檢查內容

服務器端會讀取上傳的文件然后判斷文件內容時候有<?php之類的


繞過方法:

<script language="php">eval($_POST['cmd']);</script>
  1. 如果檢查文件頭的話就就可以找張真正的圖片然后用winhex在圖片的末尾寫php代碼

4. 檢查文件擴展名

一般檢查文件擴展名為最直接有效的方法,通常是基于白名單或者黑名單來實現的。

黑名單繞過

  1. 可以使用能夠被解析的其他文件擴展名
jsp jspx jspf
asp asa cer aspx
php phtml php3 php4 php5 PHP phtm
exe exee
  1. 特殊文件名繞過
    比如在上傳的時候改成test.asp.或者test.asp_(下劃線為空格,這里方便大家看用下劃線表示了),這種命名方式在windows下是不允許的,繞過驗證后windows系統(tǒng)自動去掉后面的點和空格,但要注意Unix/Linux是沒有這個特性的。

  2. 00截斷
    有的時候可能會遇到服務器端把后綴名已經定好了,而恰好別的地方有一個可以任意讀取php文件的服務,這個時候可以把圖片馬上傳后在這里查看,查看的時候用%00把后面的.php給截斷就好了

  3. .htaccess文件攻擊
    配合名單列表繞過,上傳一個自定義.htaccess文件,即可輕松繞過各種檢測。

  4. 解析漏洞繞過
    這類漏洞直接配合上傳一個代碼注入過的非黑名單文件即可,再利用解析漏洞即可

白名單繞過

  1. %00截斷
    跟之前說的很像,就是上傳一個比如shell.php%00.jpg,服務器檢測后綴名是.jpg,但實際上已經被截斷了。

  2. 解析漏洞利用
    這類漏洞直接配合上傳一個代碼注入過的白名單文件即可,再利用解析漏洞

  3. .htaccess文件攻擊
    配合名單列表繞過,上傳一個自定義.htaccess文件,即可輕松繞過

0x04 與文件上傳息息相關的解析漏洞

  1. IIS5.x-6.x解析漏洞

?使用iis5.x-6.x版本的服務器,大多為windowsserver2003,網站比較古老,開發(fā)語句一般為asp;該解析漏洞也只能解析asp文件,而不能解析aspx文件。

?目錄解析(IIS6.0),只要文件夾有asp的話,該目錄下所有文件都會當作asp來解析,www.xxx.com/xx.asp/xx.jpg(xx.asp要存在)

?www.xxx.com/xx.asp;.jpg服務器默認不解析;號后面的內容,因此xx.asp;.jpg便被解析成asp文件了。(xx.asp;.jpg為上傳文件)

  1. IIS的PUT上傳

?PUT是在WebDav中定義的一個方法,允許用戶上傳文件到指定目錄。
?在許多WebServer中都默認禁用了此方法,或者對上傳做了嚴格限制。但在IIS中,如果目錄支持寫權限,同時開啟了WebDav,就會支持PUT,再結合MOVE方法,可Getshell。

  1. 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í)行。(配置錯誤)

  1. nginx解析漏洞(Nginx<8.03)

?當cgi.fix_pathinfo開啟時(為1)

?當訪問www.xx.com/phpinfo.jpg/1.php時,會將phpinfo.jpg當做php進行解析

?其中1.php是一個不存在的文件

0x06 參考

  1. 某大佬的PPT

  2. 文件上傳框架

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容