介紹
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檔案解析漏洞涉及到一個解析檔案的特性。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
此處檔案名處加空格
Hex改空格(20)處為0a
POST中密碼即可成功傳值
通過蟻劍連接配接
修複建議
在httpd.conf檔案中找到
Options + Indexes + FollowSymLinks + ExecCGI
修改成
Options -Indexes + FollowSymLinks + ExecCGI
儲存(把+修改為-)