Apache HTTPD是一款HTTP
伺服器,該伺服器是現在市場上使用最多的伺服器,今天對該中介軟體做一些漏洞復現
Apache HTTPD 換行解析漏洞(CVE-2017-15715)
Apache透過mod_php來執行PHP網頁
- 影響範圍: 2.4.0~2.4.29
- 漏洞描述: 存在解析漏洞,在解析
.php
時,會將1.php\x0A
當做PHP檔案執行,從而繞過一些安全策略
漏洞在vulhub
中,我使用kali
啟動
啟動後再kali主機的8080
埠執行
-
上傳普通的
php
檔案
上傳失敗
-
再次上傳在
burpsuite
更改shell.php
後方加入\x0A
,然後上傳
注意:在hex
頁面中,找到php
後面一位加入\x0A
放包後頁面沒有任何回顯,代表上傳成功
-
訪問並驗證
shell.php
是否上傳成功,注意需要再檔名後方加入%0a
,因為十六進位制\x0a
在url編碼中需要使用%
開頭
實驗完畢。
Apache HTTPD 多字尾解析漏洞
Apache HTTPD支援檔名有多個字尾,例如shell.php.jpg
,解析流程如下:
- 解析
shell.php.jpg
檔案,如果支援jpg
檔名字尾則解析該檔案,不可以往前看前一個字尾名 - 若
shel.php.jpg
字尾名無法解析,嘗試將檔案解析前一個字尾名shell.php
檔案
透過安裝伺服器的/conf/httpd.conf
配置檔案中都會含有解析php檔案
AddHandler application/x-httpd-php .php
那麼利用這個特性可以理解為只要檔名中包含php
就可以將檔案解析為PHP檔案執行,這可以造成白名單的繞過,例如shell.php.xxx
一般伺服器肯定不會設定有xxx
字尾名的解析,所以理所應當的把shell.php.xxx
當做PHP檔案執行
- 啟動
vulhub
環境
cd /vulhub/httpd/apache_parsing_vulnerability
sudo docker-compose up -d
訪問80
埠檢視
進入容器檢視審計原始碼
<?php
if (!empty($_FILES)):
$ext = pathinfo($_FILES['file_upload']['name'], PATHINFO_EXTENSION);
if (!in_array($ext, ['gif', 'png', 'jpg', 'jpeg'])) {
die('Unsupported filetype uploaded.');
}
$new_name = __DIR__ . '/uploadfiles/' . $_FILES['file_upload']['name'];
if(!move_uploaded_file($_FILES['file_upload']['tmp_name'], $new_name)){
die('Error uploading file - check destination is writeable.');
}
die('File uploaded successfully: ' . $new_name);
else:
?>
<form method="post" enctype="multipart/form-data">
File: <input type="file" name="file_upload">
<input type="submit">
</form>
<?php
endif;
透過pathinfo()方法獲取檔案上傳路徑,然後使用in_array
判斷是否檔名是否含有['gif', 'png', 'jpg', 'jpeg']
,含有下方的字尾名就可以將檔案上傳
一般情況下Apache伺服器都不會配置解析jpg
圖片,所以接著解析php
字尾名
上傳shell.php.jpg
訪問
成功解析