天天看點

Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

介紹

Apache(音譯為阿帕奇)是世界使用排名第一的Web伺服器軟體。它可以運作在幾乎所有廣泛使用的計算機平台上,由于其跨平台和安全性被廣泛使用,是最流行的Web伺服器端軟體之一。它快速、可靠并且可通過簡單的API擴充,将Perl/Python等解釋器編譯到伺服器中。

簡而言之,Apache伺服器不僅簡單好用,還能支援HTML、PHP、Perl、Python等基礎語言。

目錄介紹

bin-------存放常用的指令工具,例如httpd
cgi-bin---存放Linux下常用的指令,例如xxx.sh
conf------Linux的配置相關檔案,例如httpd.conf
error-----錯誤記錄
htdocs----放網站源碼
icons-----網站圖示
logs------日志
manual----手冊
modules---擴充子產品
           

Apache換行解析漏洞(CVE-2017-15715)

影響版本:Apache 2.4.0~2.4.29

影響說明:繞過伺服器政策,上傳webshell

環境說明:PHP5.5.38 、 Apache2.4.10

環境搭建

東塔靶場
Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

漏洞原理

Apache檔案解析漏洞與使用者的配置有密切關系,嚴格來說屬于使用者的配置問題。Apache檔案解析漏洞涉及到一個解析檔案的特性。Apache預設一個檔案可以有多個以點分隔的字尾,當右邊的字尾無法識别,則繼續向左識别,發現字尾是php,交給php處理這個檔案。

為什麼叫換行解析漏洞?是因為在上傳時在檔案名字尾後面加了0x0a(換行)

不過為什麼要加0x0a呢?看下源碼

<?php
if(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);
} else {

?>
<form method="POST" enctype="multipart/form-data">
	<p>
		<label>file:<input type="file" name="file"></label>
	</p>
	<p>
		<label>filename:<input type="text" name="name" value="shell.php"></label>
	</p>
	<input type="submit">
</form>
           

背景通過黑名單方式過濾了php等字尾的檔案。php檔案在<FilesMatch .php$>有定義,以.php結尾的檔案都算php檔案,在正則中表示比對輸入字元串的結尾位置。如果設定了RegExp對象的Multiline屬性,則也比對 ‘\n’ 或 ‘\r’。

恰好,我們在檔案末尾加了0x0a(\n),是以被比對成功了。

漏洞複現

上傳一個webshell一句話木馬檔案,shell.php

此處檔案名處加空格

Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

Hex改空格(20)處為0a

Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

POST中密碼即可成功傳值

Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

通過蟻劍連接配接

Apache 中間件漏洞(換行解析)詳解介紹目錄介紹Apache換行解析漏洞(CVE-2017-15715)環境搭建漏洞原理漏洞複現修複建議

修複建議

在httpd.conf檔案中找到

Options + Indexes + FollowSymLinks + ExecCGI

修改成

Options -Indexes + FollowSymLinks + ExecCGI

儲存(把+修改為-)