Apache漏洞復現

Junglezt發表於2024-04-06

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埠執行

  1. 上傳普通的php檔案

    上傳失敗

  2. 再次上傳在burpsuite更改shell.php後方加入\x0A,然後上傳
    注意:在hex頁面中,找到php後面一位加入\x0A

    放包後頁面沒有任何回顯,代表上傳成功

  3. 訪問並驗證shell.php是否上傳成功,注意需要再檔名後方加入%0a,因為十六進位制\x0a在url編碼中需要使用%開頭

    實驗完畢。

Apache HTTPD 多字尾解析漏洞

Apache HTTPD支援檔名有多個字尾,例如shell.php.jpg,解析流程如下:

  1. 解析shell.php.jpg檔案,如果支援jpg檔名字尾則解析該檔案,不可以往前看前一個字尾名
  2. 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檔案執行

  1. 啟動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


訪問

成功解析

相關文章