基于 inetd 后门的简要分析及利用

华盟原创文章投稿奖励计划

0x01 理解inetd是干什么的

通俗来讲就是一个监听外部网络请求 [就是一个socket] 的系统守护进程,其实有很多比较古老的服务都是基于此守护进程的

具体怎么工作的呢,其实非常简单,当inetd接收到一个外部请求后,它会根据这个请求到自己的配置文件中去找到实际处理它的程序

然后再把接收到的这个socket交给那个程序去处理,问题恰巧也就出在这里

如果来自外部的某个socket是要执行一个可交互的shell [比如,我们已经在目标系统的inetd配置文件中事先定义好],这岂不是就相当于一个简易的bind型后门

另外,关于使用inet的好处就是,不用每个服务都再单独起个进程,这样可以有效降低系统资源消耗,你甚至也可以一定程度上把它理解成linux中的'svchost.exe'进程

0x02 关于inetd.conf配置的具体使用说明

[service_name] [sock_type] [proto] [flags] [user] [server_path] [args]
[服务名称] [协议(tcp或udp)] [标志(wait或 nowait)] [属主] [真实服务程序全路径] [真实服务程序名称及参数]

我们不妨先来仔细理解下下面语句的意思

ftp stream tcp nowait root /usr/sbin/in.ftpd in.ftpd

ftp stream: 

inetd 开始监听ftp服务[默认端口是21]

这里的协议名称及默认端口号其实都已在/etc/protocol和/etc/services文件中事先定义好

stream : 并为此服务创建流类型的socket

tcp: 使用tcp协议

root /usr/sbin/in.ftpd in.ftpd:

当inetd监听到ftp客户端请求,且端口成功连接后,inetd就会fork一个子进程,该子进程属主为root

同时它也继承了该子进程的父进程与客户端连接成功后所产生的子socket
然后该子进程将该子socket为0,1,2[标准输入,输出及错误输出]发给execl去执行/usr/sbin/in.ftpd in.ftpd程序

另外,这里还需要稍微注意下,定义要执行的程序必须给绝对路径

nowait: 父进程不会等待子进程的退出状态

0x03 开始插入inetd后门,此处暂以ubuntu 16.04LTS为例进行演示

因为默认没装,我们需要先装下inetd

# apt-get install openbsd-inetd

为了更好的隐藏我们的shell,可以直接用service中定义好的服务,只需要把实际的处理程序替换下即可

# vi /etc/services
fido   60179/tcp    # fidonet EMSI over TCP

基于 inetd 后门的简要分析及利用

# inetd
# ps -le | grep inetd

0x04 实际的连接效果如下

# nc -vv 192.168.3.28 60179

基于 inetd 后门的简要分析及利用

小结:

也并不是什么特别新鲜的东西,年代跟差不多跟suid后门一样久远,使用也非常简单,不过背后所涉及到的知识还需要大家多花点儿时间去透彻理解下,相信这样你会收获的更多,作为个小tip,在实际渗透内网时,可能会用的上,还是那句话,像这类的bind上去的后门有个通病,只要目标系统防火墙一开基本就全废了

文章出处:klion's blog
原文链接:
https://klionsec.github.io/2017/10/23/inetd-backdoor/

本文原创,作者:张,其版权均为华盟网所有。如需转载,请注明出处:https://www.77169.net/html/244752.html

发表评论