一、文件上傳思路
首先我們通過一個網站上傳一個非法格式的文件
- 在瀏覽加載文件,但還未點擊上傳按鈕時便彈出對話框,內容如:只允許上傳.jpg/.jpeg/.png後綴名的文件,而此時並沒有發送數據包。
- 如果網頁未彈窗,而在頁面彈窗,則考慮後端驗證
所以就圍繞前端驗證繞過和後端驗證繞過這兩方面展開討論
二、前端驗證
JavaScript驗證的幾種繞過方式:
- 2.1 通過瀏覽器審查元素對網頁的代碼查看,找到對文件格式或大小的限制然後修改即可;
- 2.2 通過Burpsuite工具對瀏覽器進行代理,抓包對包裏的內容進行修改。
- 2.3瀏覽器禁用JavaScript腳本
三、後端驗證
後端驗證的方案:
- MIME類型驗證
- 文件後綴驗證
- 文件路徑驗證(權限問題)
- 文件內容驗證
MIME類型驗證繞過
- 上傳php文件,通過burpsuite抓包修改content-type的值爲允許上傳文件類型的MIME值
- 將php文件修改文件格式爲允許上傳的格式文件,通過抓包修改filename爲php的格式
- 截斷,當gpc關閉的時候,首先將文件修改爲規定的格式如jpg格式如:a.jpg,然後通過抓包修改filename中的文件名爲a.php%00.jpg,%00需要URL解碼一下,然後上傳。此時上傳到服務器的文件爲a.php
文件後綴驗證繞過
-
%00截斷
截斷的原理可以類比編程裏的分號,如我們一條語句要以分號結尾,或者相當於把空字節之後的內容註釋掉。具體的原理講解可參考以下博文:
[基本實驗] %00截斷攻擊的探索
CTF實驗吧-上傳繞過【0x00截斷】
示例:
如目標網站不允許上傳php後綴的文件,而我們的目標是要上傳一個php文件。此時將文件修改爲允許的格式,然後Burp suite抓包,將文件名改爲xxx.php%00.jpg,%00要進行URL編碼。此時服務器看到%00會認爲文件名已經結束從而使得上傳到目標網站的文件爲xxx.php -
通過大小寫混淆
網站後臺對後綴的限制只是黑名單限制如不允許php文件格式,此時上傳PhP只要與php不同的文件後綴便可繞過 -
通過畸形文件名繞過,如限制asp,但嘗試下其他未限制但是仍然屬於asp格式文件的後綴,若目標爲windows系統,可以通過burpsuite抓包在後綴後面加_或空格,此時windows系統在解析時會自動忽略。如
test.asp改爲test.asp_
路徑驗證繞過
- 通過多種繞過之後將文件上傳到目標網站的上傳目錄下,但是在此目錄下有時會被限制權限導致無法執行。
- 通過上傳的同時進行burp
suite抓包,如上傳xxx.php,將文件名改爲…/xxx.php此時如果服務器端未作限制便會將文件上傳到上傳目錄的上一層目錄之下,然後獲得執行的權限。
文件內容驗證繞過
- 當目標服務器對文件內容進行驗證,如:檢測上傳的圖片內容的開頭是否爲圖片文件的頭部。 通過製作圖片馬來進行嘗試繞過
windows下cmd圖片馬的製作
- 首先將準備好的圖片和寫好的代碼放到一個文件夾裏
- 然後cmd進入到這個目錄下面然後cmd進入到這個目錄下面
- 輸入命令
copy 圖片/b + 代碼文件/a 生成文件
我生成了一個叫image_shell的文件,便於標識
用寫字板打開後搜索代碼內的關鍵字可以看到,代碼已經被寫入到圖片文件內部
四、黑名單限制與白名單限制
黑名單限制
- 簡單的來說就是我不允許哪些格式上傳,其他的格式我不管。比如:不允許.php
.asp格式上傳,如果你上傳的文件的後綴與我所規定的格式匹配則會上傳失敗。
繞過
- 大小寫繞過
- 畸形文件名繞過
- %00截斷
- windows系統後綴添加_或空格
白名單限制
- 白名單就是我只允許這些格式文件上傳,其他文件的格式我一律不允許。如:我只允許上傳jpg、png格式的文件,假如你上傳一個php格式的文件,則會上傳失敗。也就是說只有用戶上傳的文件的格式與我所規定的格式匹配纔會上傳成功。
繞過
- %00截斷
- 修改.htaccess
- 解析漏洞
顯然,白名單限制要比黑名單限制更加安全
四、解析漏洞總結
IIS解析漏洞
IIS5.x/6.0:
- IIS6.0:文件夾若爲.asp或.asa命名,則文件夾內的文件無論什麼後綴都會按照asp的格式進行解析。如xx.asp下有1.jpg,則1.jpg會按照asp進行解析
- IIS6.0下,分號後面的不被解析,如1.asp;.jpg文件,最終文件爲1.asp
- IIS6.0可執行文件後綴包含了.asa、.cer、.cdx
Apache解析漏洞
apache1.x/2.x:當碰到不認識的擴展名時,解析文件後綴的方向爲從右向左,直到碰到可以解析的後綴。如上傳一個文件爲xxx.php.sss.aaa
PHP CGI漏洞
IIS7.0、7.5、nginx、PHP的網站可以嘗試在圖片後面加/.php查看是否按照php進行執行如,1.jpg/.php
五、其他
- 如果.htaccess文件可執行且被上傳,可以修改.htaccess文件使得服務器可以將圖片格式按照php解析
六、DVWA1.9版本實驗
Low級別
low級別可以直接上傳php後綴文件,對文件沒有做任何限制
Medium級別
對文件的MIME類型做了驗證,有三種方法繞過:
- 將瀏覽器開啓代理打開Burp suite抓包,抓到的包顯示如下,將content-type改爲image/jpeg
然後點擊forward
通過菜刀進行連接
成功連接 - 文件包含+文件上傳。將準備好的shell文件先改名爲x.jpg,然後上傳抓包
然後修改filename的後綴爲php
最後上傳到服務器的文件仍然爲php文件 - 通過製作圖片木馬,上傳圖片馬
首先製作好圖片馬shell.jpg,然後上傳文件
通過菜刀連接
如果可以連接則會顯示如下窗口,
結合文件包含,將文件包含的URL拿到菜刀那裏進行連接,通過文件包含將圖片馬按照php格式進行執行然後連接。 - %00截斷,當magic_quote_gpc=off時,可以結合截斷進行上傳
首先將準備好的 shell文件改爲jpg格式,然後上傳代理抓包
修改如下
%00需要URL解碼
然後點擊forward,上傳到服務器的文件便是x.php
high級別
上傳圖片馬結合文件包含菜刀連接