獻(xiàn)縣網(wǎng)站甲馬營seo網(wǎng)站優(yōu)化的
漏洞簡(jiǎn)介
pache HTTPD是一款HTTP服務(wù)器,它可以通過mod_php來運(yùn)行PHP網(wǎng)頁。其2.4.0~2.4.29版本中存在一個(gè)解析漏洞,在解析PHP時(shí),1.php\x0A
將被按照PHP后綴進(jìn)行解析,導(dǎo)致繞過一些服務(wù)器的安全策略。
漏洞環(huán)境
vulhub/httpd/CVE-2017-15715
Vulhub - Docker-Compose file for vulnerability environment
漏洞復(fù)現(xiàn)
進(jìn)入vulhub項(xiàng)目對(duì)應(yīng)的目錄:cd vulhub-master/httpd/CVE-2017-15715
編譯容器:“docker-compose build”
啟動(dòng)Docker容器,輸入命令:“docker-compose up -d”。
查看容器狀態(tài),輸入命令:“docker ps”并查看對(duì)應(yīng)容器ID。
進(jìn)入容器,輸入命令:“docker exec -it 容器id /bin/bash”。
該漏洞屬于用戶配置不當(dāng)所產(chǎn)生的,看一下配置文件信息,輸入命令“cat /etc/apache2/conf-available/docker-php.conf”,如圖所示。
前三行的內(nèi)容意思是將所有以“.php”為后綴的文件內(nèi)容當(dāng)作PHP代碼進(jìn)行解析,但是卻使用了“$”進(jìn)行文件匹配,這就導(dǎo)致了漏洞的產(chǎn)生。這個(gè)符號(hào)在正則表達(dá)式中是匹配字符串中結(jié)尾的位置,若存在換行則匹配換行符為結(jié)尾,也就是說可以利用換行符使“$”與其匹配從而繞過黑名單機(jī)制實(shí)現(xiàn)文件上傳。
如果在黑名單的后綴不讓上傳php jsp等,就可以通過php%0a繞過黑名單,但是需要保證這個(gè)后綴是能夠正常解析的腳本代碼。如果是白名單可能不行(在白名單里面才可以上傳jpj,png,gif 等),但是如果沒有考慮以最后一個(gè)點(diǎn)為后綴,通過1.jpg.php%0a的形式也可能能夠繞過。
查看index.php內(nèi)容,代碼如下:
<?phpif(isset($_FILES['file'])) {$name = basename($_POST['name']);$ext = pathinfo($name,PATHINFO_EXTENSION);if(in_array($ext, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) {exit('bad file');}move_uploaded_file($_FILES['file']['tmp_name'], './' . $name);}
可以看到除了上傳文件外,還要以POST請(qǐng)求方式傳入?yún)?shù)name,其值作為文件上傳后最后的名字,同時(shí)設(shè)置了黑名單過濾name值傳遞的帶有黑名單信息的后綴。如果通過 $FILES["file"]獲 取文件名的話,會(huì)把\x0a自動(dòng)去除,所以 $FILES["file"]這種方式獲取文件名也不會(huì)造成這個(gè)漏洞.
啟動(dòng)后Apache運(yùn)行在http://your-ip:8080
創(chuàng)建一個(gè)文件,寫入<?php phpinfo();?>?
上傳文件可以看到是上傳失敗
通過burp抓包把在實(shí)際上傳文件名后加0a,也就是filename的值加上0a
我用的burp是2021版本,沒有hex選項(xiàng),可以通過選擇單個(gè)字符修改
老版本可以通過hex修改,修改完,文件正常上傳。
訪問http://your-ip:8080
/test.php%0A,可以看到PHP代碼已經(jīng)被解析,如圖所示。