VulnHub靶场 Hard_Socnet2
主机发现#
先进行主机发现
发现目标主机为 192.168.10.225
,对其进行端口服务搜集
目标主机开放 80
和 8000
端口,运行 HTTP 服务。
80 端口页面如下,是一个登录界面
8000 端口页面如下,提示 GET 请求不可用。
Webshell 上传#
在 80 的登录界面,发现可以注册,我们注册一个账户登录进去
成功注册后跳转到如下界面
检查其功能,发现其 Feed 的 URL 似乎存在 SQL 注入
对其进行 SQL 注入测试,成功
读取目标数据库信息,得到用户信息
尝试登录 admin 用户。登录成功后,即可操作该用户的 Feed 信息
存在上传功能点,尝试上传木马。成功上传并连接蚁剑
CVE-2021-3493 提权#
查看当前用户权限
查看目标系统信息
目标是一个 Ubuntu 18.04.1 LTS
,该版本存在 CVE-2021-3493
漏洞,我们尝试利用
利用失败,似乎蚁剑这个 shell 存在问题,我们拿 nc 反弹试试
在 nc 中尝试提权
成功。我们在这个基础上,尝试创建一个 nc 会话
这就拿到 root 的会话了。
XMLRPC 命令执行#
我们上面是用系统漏洞去提权,我们换一种方法。在 home 下发现一个 socnet
用户,该用户目录下存在一个 monitor.py
,代码如下
这个文件是一个 XML-RPC 服务器
,而且其中有一个 secure_cmd
函数,在知道密码的情况下可以执行任意命令。密码是从 1000 到 9999 的随机数。
该文件的权限是 socnet
并且它现在正在运行
我们先简单连接一下
输出 Wrong passcode.
,由于密码是从 1000 到 9999 的随机数,所以我们可以直接爆破
得到密码为 4416,成功执行命令
我们用这种方式反弹一个 nc 出来。
成功拿到 socnet
用户的 shell
缓冲区溢出漏洞#
注意到目录下有个叫 add_record
的可执行文件,有 root 权限
我们尝试运行一下它
它会让我们输入内容,然后内容会输出到文件内。我们使用 gdb 进行调试,在 Explain
中发现溢出
可以看到,在堆栈中出现的了大量的 a
。这是因为参数没有做很好的处理,导致这个 a
溢出了
而且还能注意到,EIP 寄存器也被覆盖了。
EIP 寄存器是 CPU 接下来要运行的下一条指令。现在就看这么多 a
中,哪几个 a
是覆盖到 EIP 的。我们可以利用 gdb 去生成特征字符来查看
这样就会生成 100 个特征字符
我们拿这个字符串进行测试,得到如下结果
这个 AHAA 具体在哪,我们可以 search 一下
可以看到偏移量是 62,也就是说第 63 个字符就会进入 EIP 寄存器里。这样的话我们重新构建一下 payload
我们测试这个 payload,得到如下结果
现在 “HHHH” 就是进入 EIP 的位置了,那这个咋用呢,我们去查看汇编源码
翻的时候,发现存在一个 vuln
函数,而是是自建函数
这不就明摆着有问题嘛,我们看一下整体函数
发现程序调用了 system
和 setuid
这两个函数。system
函数是用来执行一些系统命令;setuid 函数是用于去申请 suid 权限。在下面还有一个 backdoor
。
我们先去查看 vuln
函数
vuln
调用了一个 strcpy
函数,经过搜索,发现这个 strcpy
函数存在缓冲区溢出漏洞。接着再来看看 backdoor
函数
这个函数调用了 setuid
和 system
,不过它执行了什么呢?我们现在已知主程序中的 vuln
函数存在缓冲区溢出漏洞,那么我们可以通过它去运行这个 backdoor
函数,把 backdoor
函数的起始位置写进 EIP 里,这样 CPU 接下来就会去执行 baskdoor
函数。而该函数的起始位置是 0x08048676
。
这样就会得到一个原始 payload 数据
结果测试失败了,感觉可能是输出的时候会有编码问题,那么我们可以尝试把要输出的信息输出到一个文件里,然后直接文件传参数。
然后我们执行程序
可以看到,这里产生了一个新的进程,先执行 /bin/dash
,然后又创建了一个进程去执行 /bin/bash
。我们 break 一下 vuln
函数看看
可以看到,这里到了 backdoor
的 setuid
函数了
然后在 system
函数执行了 /bin/bash
。那现在就可以直接拿这个 payload 用了
然后在这个状态下,反弹个 nc