亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Apache如何解析漏洞和ssl遠程命令執行

發布時間:2021-11-11 18:13:05 來源:億速云 閱讀:254 作者:柒染 欄目:網絡安全

Apache如何解析漏洞和ssl遠程命令執行,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

Apache換行解析、多后綴解析、以及ssl遠程命令執行漏洞分析

1.Apache簡介:

Apache HTTP Server(簡稱 )是 的一個開放源碼的網頁服務器,可以在大多數計算機操作系統中運行,由于其多平臺和安全性 Apache Apache軟件基金會 被廣泛使用,是最流行的Web服務器端軟件之一。它快速、可靠并且可通過簡單的API擴展,將Perl/Python等解釋器編譯到服務器中。 [2] Apache HTTP服務器是一個模塊化的服務器,源于NCSAhttpd服務器,經過多次修改,成為世界使用排名第一的 軟件。 

2.漏洞描述:

Apache換行解析漏洞:

Apache HTTPD是一款HTTP服務器,它可以通過mod_php來運行PHP網頁。其2.4.0~2.4.29版本中存在一個解析漏洞,在解析PHP時,1.php\x0A將被按 照PHP后綴進行解析,導致繞過一些服務器的安全策略。

Apache多后綴解析漏洞:

在有多個后綴的情況下,只要一個文件含有.php后綴的文件即將被識別成PHP文件,沒必要是最后一個后綴。利用這個特性,將會造成一個可以繞過上傳白 名單的解析漏洞。

Apache ssl遠程命令執行漏洞:

在測試任意文件上傳漏洞的時候,目標服務端可能不允許上傳php后綴的文件。如果目標服務器開啟了SSI與CGI支持,我們可以上傳一個shtml文件,并利用<!--#exec cmd="id" --> 語法執行任意命令。

3.漏洞原理:

Apache換行解析漏洞

apache這次解析漏洞的根本原因就是這個 $,正則表達式中,我們都知道$用來匹配字符串結尾位置,我們來看看$符號在正則表達式中的含義:匹配輸入字符串的結尾位置。如果設置了 RegExp 對象的 Multiline 屬性,則 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,請使用 \$。

因此產生這個漏洞的根本原因就是設置了 RegExp 對象的 Multiline 屬性,從而使得$可以匹配換行符。

那我們進入docker環境中看一看apache2是如何配置的

Apache如何解析漏洞和ssl遠程命令執行

很明顯這里使用了$符號

我們再來看一看其他版本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

Apache多后綴解析漏洞:

配置文件內容
AddType text/html . html
AddLanguage zh-CN .c

其給.html后綴增加了media-type,值為text/html;給.cn后綴增加了語言,值為zh-CN。此時,如果用戶請求文件 .html index.cn ,他將返回一個中 文的html頁面。

那么,在有多個后綴的情況下,只要一個文件含有.php后綴的文件即將被識別成PHP文件,沒必要是最后一個后綴。利用這個特性,將會造成一個可以繞過 上傳白名單的解析漏洞。

我們會在漏洞利用部分做一個實驗。

Apache ssl遠程命令執行漏洞:

SSI(服務器端包含)是放置在HTML頁面中的指令,并在服務頁面時在服務器上對其進行評估。它們使您可以將動態生成的內容添加到現有的HTML頁面, 而不必通過CGI程序或其他動態技術來提供整個頁面。

其實apache的ssl更像是flask的jinjia2,用來實現和前端實現一種動態交互,只不過在配置ssl之后,如果上傳接口沒有過濾掉.shtml文件,那么就可以就其中 包含我們要執行的命令。

<!--#exec cmd="ls -al" -->

4.漏洞利用:

Apache換行解析漏洞:

實驗1

這里有一個小知識就是如何進入docker容器內部:

查看鏡像資源
docker ps
為容器打開一個shell環境
docker exec -it containerID /bin/bash

Apache如何解析漏洞和ssl遠程命令執行為了方便起見我們docker容器內部裝一個vim

安裝命令
apt-get update
apt-get install vim

在上傳利用之前,我們先在var/www/html目錄下創建一個帶有換行標志的文件

vim hack.php$'\n'Apache如何解析漏洞和ssl遠程命令執行接下來用瀏覽器訪問該文件Apache如何解析漏洞和ssl遠程命令執行驗證成功。說明該版本的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>

打開上傳頁面

Apache如何解析漏洞和ssl遠程命令執行

Apache如何解析漏洞和ssl遠程命令執行

Apache如何解析漏洞和ssl遠程命令執行
這之后就是無盡的報錯之路,百度、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"]

Apache如何解析漏洞和ssl遠程命令執行

可以看到我們上傳成功了。

Apache如何解析漏洞和ssl遠程命令執行

Apache如何解析漏洞和ssl遠程命令執行
Apache如何解析漏洞和ssl遠程命令執行

Apache多后綴解析漏洞:

Apache如何解析漏洞和ssl遠程命令執行

Apache如何解析漏洞和ssl遠程命令執行Apache如何解析漏洞和ssl遠程命令執行接下來我們做個實驗,修改一下該配置文件讓其可以識別我們自定義后綴文件為PHP文件。

Apache如何解析漏洞和ssl遠程命令執行

要注意修改完配置文件,一定要重啟apache服務但是在docker環境中我們如何做到重啟服務又不會退出容器呢?就是這條命令了
Apache如何解析漏洞和ssl遠程命令執行service apache2 reload

Apache如何解析漏洞和ssl遠程命令執行可以看到我們的info.hacker.xxx.jpg成功的按照php格式執行

Apache ssl遠程命令執行漏洞:

Apache如何解析漏洞和ssl遠程命令執行Apache如何解析漏洞和ssl遠程命令執行Apache如何解析漏洞和ssl遠程命令執行

Apache的漏洞大部分都是配置錯誤問題,很多程序員不熟悉這些配置或者說不熟悉安全配置問題,故而寫出有問題的代碼或災難性的配置文件,這才給黑客可趁之機,造成嚴重后果。而有的配置問題是apache自帶的,那后果將更加嚴重。所以編寫安全的配置文件同樣重要。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

繁峙县| 图们市| 南郑县| 桐梓县| 勐海县| 新邵县| 寿阳县| 元朗区| 陆河县| 永年县| 阳信县| 兰州市| 龙口市| 监利县| 桃园市| 永嘉县| 蕲春县| 札达县| 三原县| 丰原市| 马公市| 四子王旗| 修水县| 博兴县| 泗水县| 镇平县| 江门市| 淮北市| 东丽区| 泸水县| 青岛市| 大城县| 长宁县| 巩义市| 海原县| 虞城县| 金秀| 博兴县| 高台县| 桐城市| 思南县|