為什么會存在文件上傳呢?
- 網(wǎng)站為了給用戶更好的體驗,也有助于提高業(yè)務(wù)效率。
- 一般的社會網(wǎng)絡(luò)的web應(yīng)用程序,博客,論壇,電子,銀行網(wǎng)站等。會給用戶與企業(yè)員工有效的共享文件,
- 在運營過程中,對網(wǎng)站內(nèi)容的更新,需要網(wǎng)站就要文件上傳功能
- 允許上傳文件,視屏,頭像和許多其他類型文件。
- 這樣的做法是基于對用戶的完全信任。(但是我們不是一個好人~~)
上傳文件本身是不存在漏洞
為什么會出現(xiàn)上傳文件漏洞呢?
- 服務(wù)器配置不當(dāng)
在不需要上傳頁面的情況下,
導(dǎo)致任意文件上傳HTTP請求方法(put)
將.html后綴的文件使用.php進(jìn)行解析,
導(dǎo)致.html .xml等靜態(tài)頁面被解析
上傳文件保存磁盤未NTFS格式可以通過$data繞過黑名單限制
等等,這屬于管理員問題。
- 開源編輯器漏洞
- 本地文件上傳限制繞過
只是在本地限制,使用抓包工具,修改上傳文件,繞過
- 過濾不嚴(yán)或是繞過
使用黑名單過濾掉一些關(guān)鍵的可執(zhí)行腳本文件,但是也不全是被繞過。
例如:服務(wù)器過濾掉了.php文件,但是沒有過濾掉.php3等可執(zhí)行文件
php2,php5,phtml,aspx等等
- 文件解析漏洞導(dǎo)致文件執(zhí)行
- 文件路徑截斷
?
%00
\0
可以控制文件路徑的情況下,使用超長文件
路徑被截斷,造成上傳
從漏洞原理總結(jié),分為四類web應(yīng)用程序解析漏洞
-
Apache 的拓展名順序解析漏洞
Apache自身漏洞
前提:-test.php.任意不屬于黑名單也不屬于Apache解析白名單名稱
文件x1.x2.x3的文件 Apache會從x3的位置往x1位置嘗試解析,
以遞歸的形式,直到找到Apache可以解析的拓展名,從x3到x2,再到x1
![QR49D}9367L]{])O4RU5}21.png](http://upload-images.jianshu.io/upload_images/2495234-991588ca6ccaad2d.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
有些東西還是需要個人去嘗試,發(fā)現(xiàn)更多的版本信息漏洞。
-
IIS 的asp解析漏洞
IIS自身漏洞
前提:-test.asp/任意文件名 | tset.asp;任意文件名 |
任意文件名/任意文件名/.php(來之php-cgi漏洞)
IIS6.0在解析asp格式的時候有兩個解析漏洞
1.目錄名包含".asp" 字符串,那么這個目錄下所有文件都會按照asp去解析。
2.只要文件名中含有".asp"會優(yōu)先按照asp來解析
![%W`ZP4TBURTV%N}8]WH5]G3.png](http://upload-images.jianshu.io/upload_images/2495234-519b0f2afeb5fdc3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-
Nginx %00解析漏洞
Nginx自身漏洞
前提:任意文件名/任意文件名.php | 任意文件名%00.php
Nginx主要有兩種漏洞:
1.一個對于任意文件名,在后面添加/任意文件名.php的解析漏洞,比如原文件名是test.jpg,可以添加test.jpg/x.php 進(jìn)行解析攻擊
2.對于低版本的Nginx可以在任意文件名后面添加%00.php 進(jìn)行攻擊
![9N4J%34V%M2VEX]TZ@@SHNN.png](http://upload-images.jianshu.io/upload_images/2495234-23c7b21abe149a9e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
-
php-cgi 的默認(rèn)配置漏洞
神馬事CGI(問度娘去0.0)
這類漏洞主要出現(xiàn)在IIS和Nginx ,主要是以CGI形式調(diào)用php的web應(yīng)用程序。Apache通常以module 的形式去調(diào)用php(比較少見)
是由 cgi.fix_pathinfo 的值造成的,默認(rèn)配置 cgi.fix_pathinfo=1
當(dāng) php.ini 中 cgi.fix_pathinfo = 1 時,PHP CGI 以 / 為分隔符號從后向前依次檢查如下路徑:
<span style="font-size: 14px;">/home/verdana/public_html/unsafe/foo.jpg/a.php/b.php/c.php
/home/verdana/public_html/unsafe/foo.jpg/a.php/b.php
/home/verdana/public_html/unsafe/foo.jpg/a.php
/home/verdana/public_html/unsafe/foo.jpg</span>
直到找個某個存在的文件,如果這個文件是個非法的文件,so… 悲劇了~
PHP 會把這個文件當(dāng)成 cgi 腳本執(zhí)行,并賦值路徑給 CGI 環(huán)境變量——SCRIPT_FILENAME,也就是 $_SERVER['SCRIPT_FILENAME'] 的值了
這是后話了
最開始是直接把php.ini中設(shè)置 cgi.fix_pathinfo = 0想一勞永逸解決。不過后來發(fā)現(xiàn)其導(dǎo)致PHP的超全局變量 $_SERVER['PHP_SELF']為空于是有些程序會出錯(比如Discuz會拼接出錯誤圖片頭像路徑)。
上傳檢測流程
- 客服端檢測繞過
javascript檢測 - 服務(wù)端檢測繞過
1.MIME類型檢測
2.目錄路徑繞過檢測
3.文件拓展名檢測
-黑名單檢測
1.文件大小寫繞過(Asp,Php)
2.名單繞過
3.特殊文件名繞過(例如:.test.asp.或是.test.asp_)
4.截斷繞過0x00
5.htaaccess文件攻擊(上傳自定以.htaccess,繞過各種檢測)
6.解析漏洞
-白名單檢測
1.截斷繞過
2.解析漏洞
-htaccess文件攻擊
啟用.htaccess,需要修改httpd.conf,啟用AllowOverride,并可以用AllowOverride限制特定命令的使用。(例如上傳一個1.jpg文件,在.htaccess文件中jpg使用php解析,完成繞過)
無視黑名單和白名單。
4.文件內(nèi)容檢測(圖片頭部內(nèi)容)
如果一個圖片在一個圖片編輯器內(nèi)打開, 就如 Gimp, 用戶就可以編輯圖片的注釋區(qū), 那兒就能插入 PHP 代碼
這是上傳漏洞的核心之一
可以囊括攻擊者所有的思路和方法(作者網(wǎng)上找到的.0好菜0.)
![1[38E]WX)L(]CEH4RFPVH~3.png](http://upload-images.jianshu.io/upload_images/2495234-c7c1326e999c6f21.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
文件上傳漏洞存在的危害
- 網(wǎng)站被控制
- 服務(wù)器淪陷
- 同一服務(wù)器下的網(wǎng)站都會被控制
如何挖掘,利用
下面的內(nèi)容就個人而言有意義
- 查找有輸入點的地方
- 目錄,文件掃描(尋找敏感文件)
- 然后去依次對比
- 哪些檢測環(huán)節(jié)存在/不存在
- 哪些環(huán)節(jié)是安全/還是有漏洞
- 哪些環(huán)節(jié)如果被利用是代碼層漏洞/還是 Web 應(yīng)用程序解析漏洞
- 對應(yīng)在該項后面進(jìn)行填寫
- 最后把 Vule 的部分選出來,再來分析如何進(jìn)行組合,以及利用它們需要什么樣的條件
- 通過這個分析框架進(jìn)行白盒/黑盒分析并羅列出所有情況
- 攻擊者便能更系統(tǒng)地分析出源碼/目標(biāo)環(huán)境可能存在的漏洞
如何修復(fù),安全配置,需注意的位置。
- 輕量級檢測必然能繞過
- 檢測的重點放在文件內(nèi)容檢測
可以用檢測腳本語言特征碼的機制 - 路徑/擴展名檢測一定要用白名單
并且注意路徑的 0x00 截斷攻擊 (把 php 更新至最新版本即可,已經(jīng)修補了這個漏洞了) - 不能有本地文件包含漏洞
- 隨時注意更新 web 應(yīng)用軟件
避免被解析漏洞攻擊
6.客服端和服務(wù)端共同驗證。
以上的內(nèi)容大部分都是個人學(xué)習(xí)過程中,收集的信息。
Know it then hack it