您好,登錄后才能下訂單哦!
Apache如何解析漏洞和ssl遠程命令執行,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
Apache HTTP Server(簡稱 )是 的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由于其多平臺和安全性 Apache Apache軟件基金會 被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中。 [2] Apache HTTP服務器是一個模塊化的服務器,源于NCSAhttpd服務器,經過多次修改,成為世界使用排名第一的 軟件。
Apache HTTPD是一款HTTP服務器,它可以通過mod_php來運行PHP網頁。其2.4.0~2.4.29版本中存在一個解析漏洞,在解析PHP時,1.php\x0A將被按 照PHP后綴進行解析,導致繞過一些服務器的安全策略。
在有多個后綴的情況下,只要一個文件含有.php后綴的文件即將被識別成PHP文件,沒必要是最后一個后綴。利用這個特性,將會造成一個可以繞過上傳白 名單的解析漏洞。
在測試任意文件上傳漏洞的時候,目標服務端可能不允許上傳php后綴的文件。如果目標服務器開啟了SSI與CGI支持,我們可以上傳一個shtml文件,并利用<!--#exec cmd="id" --> 語法執行任意命令。
apache這次解析漏洞的根本原因就是這個 $,正則表達式中,我們都知道$用來匹配字符串結尾位置,我們來看看$符號在正則表達式中的含義:匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,請使用 \$。
因此產生這個漏洞的根本原因就是設置了 RegExp 對象的 Multiline 屬性,從而使得$可以匹配換行符。
那我們進入docker環境中看一看apache2是如何配置的
很明顯這里使用了$符號
我們再來看一看其他版本apaceh的模塊中對于php的配置文件:
<FilesMatch ".+\.ph(p[3457]?|t|tml)$"> SetHandler application/x-httpd-php </FilesMatch> <FilesMatch ".+\.phps$"> SetHandler application/x-httpd-php-source # Deny access to raw php sources by default # To re-enable it's recommended to enable access to the files # only in specific virtual host or directory Require all denied </FilesMatch> # Deny access to files without filename (e.g. '.php') <FilesMatch "^\.ph(p[3457]?|t|tml|ps)$"> Require all denied </FilesMatch> # Running PHP scripts in user directories is disabled by default # # To re-enable PHP in user directories comment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it. <IfModule mod_userdir.c> <Directory /home/*/public_html> php_admin_flag engine Off </Directory> </IfModule>
可以看到這里相對docker環境中的多了幾種php后綴的識別,如果這里的$設置過RegExp 對象的 Multiline 屬性,那么該版本的apache也將存在換行解析漏洞。
php php3 php4 php5 php7 pht phtml
配置文件內容 |
---|
AddType text/html . html AddLanguage zh-CN .c |
其給.html后綴增加了media-type,值為text/html;給.cn后綴增加了語言,值為zh-CN。此時,如果用戶請求文件 .html index.cn ,他將返回一個中 文的html頁面。
那么,在有多個后綴的情況下,只要一個文件含有.php后綴的文件即將被識別成PHP文件,沒必要是最后一個后綴。利用這個特性,將會造成一個可以繞過 上傳白名單的解析漏洞。
我們會在漏洞利用部分做一個實驗。
SSI(服務器端包含)是放置在HTML頁面中的指令,并在服務頁面時在服務器上對其進行評估。它們使您可以將動態生成的內容添加到現有的HTML頁面, 而不必通過CGI程序或其他動態技術來提供整個頁面。
其實apache的ssl更像是flask的jinjia2,用來實現和前端實現一種動態交互,只不過在配置ssl之后,如果上傳接口沒有過濾掉.shtml文件,那么就可以就其中 包含我們要執行的命令。
<!--#exec cmd="ls -al" -->
實驗1:
這里有一個小知識就是如何進入docker容器內部:
查看鏡像資源 |
---|
docker ps |
為容器打開一個shell環境 |
---|
docker exec -it containerID /bin/bash |
為了方便起見我們docker容器內部裝一個vim
安裝命令 |
---|
apt-get update apt-get install vim |
在上傳利用之前,我們先在var/www/html目錄下創建一個帶有換行標志的文件
vim hack.php$'\n'接下來用瀏覽器訪問該文件驗證成功。說明該版本的apache是存在此漏洞的。
實驗2:
接下來我們通過上傳的方式再次去驗證一下漏洞(注意:這里有個很大的坑)
我們先來看一下docker環境中index.php的內容
index.php
<?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); } ?>
注意這里只給了一個index.php文件,復現到這,我以為vulhub作者忘掉了一個上傳的html頁面,我特意的寫了上去
<html><head>upload</head><body><form action="index.php" method='post' enctype='multipart/form-data'><input type='file' name='file'><input type='text' name='name'><input type='submit'></form></body> </html>
打開上傳頁面
這之后就是無盡的報錯之路,百度、Google、改目錄、修權限。從復現到放棄。緩了好幾天之后,下決心要解決這個問題。搜了好多文章沒有一個解釋這個問題。
我先寫了一個正常的上傳PHP文件
<?php if(isset($_FILES['file'])) { $temp = explode(".", $_FILES["file"]["name"]); $extension = end($temp); echo $name; if(in_array($extension, ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'])) { exit('bad file'); } move_uploaded_file($_FILES['file']['tmp_name'], 'upload/' . $_FILES["file"]["name"]); echo "123"; } ?>
和之前的進行對比之后,終于知道哪里出問題了。
通過自己寫的html文件進行上傳name的地方沒有文件名(注意:這里我們一定要自己補上)為什么要這樣做?因為vulhub給出的
php文件是通過$_POST['name']獲取文件名的。
$name = basename($_POST['name']);
注意:下邊這種方式獲取文件名是會自動去掉換行符的。所以該漏洞不能使用該方法獲取文件名。
$_FILES["file"]["name"]
可以看到我們上傳成功了。
接下來我們做個實驗,修改一下該配置文件讓其可以識別我們自定義后綴文件為PHP文件。
要注意修改完配置文件,一定要重啟apache服務但是在docker環境中我們如何做到重啟服務又不會退出容器呢?就是這條命令了
service apache2 reload
可以看到我們的info.hacker.xxx.jpg成功的按照php格式執行
Apache的漏洞大部分都是配置錯誤問題,很多程序員不熟悉這些配置或者說不熟悉安全配置問題,故而寫出有問題的代碼或災難性的配置文件,這才給黑客可趁之機,造成嚴重后果。而有的配置問題是apache自帶的,那后果將更加嚴重。所以編寫安全的配置文件同樣重要。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。