0x00實驗環境
攻擊機:win10
靶機:Ubuntu18 (docker搭建的vulhub靶場)
0x01實驗目的
了解httpd解析漏洞,並能在之后的文件上傳環境獲取文件上傳新姿勢,Apache HTTPD是一款HTTP服務器,它可以通過mod_php來運行PHP網頁。其2.4.0~2.4.29版本中存在一個解析漏洞。
0x02實驗步驟
打開vulhub目錄,進入CVE-2017-15715目錄后,使用以下命令將靶場環境啟動起來:
docker-compose up --build
進入靶場,訪問頁面后進行測試:
選擇一個圖片馬,然后進行觀察:
這里主要是由於換行引起的php解析問題,通過上傳php文件,可以發現文件不在白名單范圍內:
那我們可以使用在白名單內的文件進行嘗試,同時以文檔.txt的格式進行上傳:
發現文件上傳成功,點擊訪問頁面:
此時,嘗試上傳惡意文件,依據httpd換行解析漏洞,我們使用在文件名后加入%0a進行換行的形式來使文件解析:
在70后的0d后插入0a以換行的方式提交報文值:
添加完成,此時修改一句話木馬為
<?php phpinfo();?>
發包成功,此時再次訪問頁面,並記得使用%0A使文件解析:
成功上傳惡意文件php並解析:
0x03實驗原理
下文參考:https://www.cnblogs.com/leixiao-/p/10223090.html
那在當前環境下具體是什么配置不當呢
在ubuntu下,Apache的配置文件在etc/apache2/apache2.conf,查看一下這個文件,發現包含了conf-enabled下的所有.conf配置文件
conf-enabled下都是conf-available中文件的鏈接,所以真正的配置文件在conf-available
就是該conf-available目錄下的docker-php.conf配置不當造成未知后綴解析漏洞
真正成因就在AddHandler application/x-httpd-php .php
是由於運維人員在配置服務器時,為了使Apache能夠解析PHP,而自己添加了一個handler。這句話的作用也是為了讓Apache把PHP文件交給php_moudle解析,但是它與sethandler的區別是它的后綴不是用正則去匹配。所以在文件名的任何位置匹配到php,他都會讓php_module解析。類似1.php.xxx.yyy文件就會是這樣的順序,.yyy無法識別,向左,.xxx無法識別,向左,.php可以識別,就激活php處理器,執行PHP代碼,解析漏洞就產生了。