05 - hard_socnet2

05 - hard_socnet2

0x01 下载地址

0x02 靶机目标

获取root权限

0x03 工具准备

  • 蚁剑启动器

  • CVE-2021-3493

  • bashnc不含-e参数反弹Shell方法(非nc串联):

  • xmlrpc文档

xmlrpc - XMLRPC server and client modules - Python 3.10.5 documentation

0x04 详细步骤

主机发现

端口扫描

Web信息收集

浏览器访问http://10.0.0.1:8000http://10.0.0.1

访问http://10.0.0.1:8000显示不支持GET方法

启动Burp,测试HTTP请求方法测试:intruder positions添加$GET$ -> payloads

发现仅支持POST请求

访问http://10.0.0.1

需要邮箱登录

注册一个账户

根据信息得知:管理账号admin,具备python运行能力

上传具备功能

上传漏洞&蚁剑连接Shell

直接上传一句话木马shell.php

显示上传成功,获取上传地址http://10.0.0.1/data/images/profiles/3.php

配置蚁剑参数,连接木马

连接成功

SQL注入

页面顶端还有一个搜索框,测试是否存在注入漏洞

输入一个输入'测试

发现存在报错

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''''' at line 1

使用sqlmap进行注入测试

使用burp获取浏览器抓包信息

把以上数据复制存储到本地r.txt文件中:

使用sqlmap注入:-r 指定文件 -p 指定注入参数

确认存在SQL注入漏洞

可以使用[email protected]admin登录系统,发现并没有与注册用户更高级的权限。

系统信息收集

CVE-2021-3493提权(方法一)

蚁剑Shell

使用蚁剑上传exploit.c到目标靶机

靶机上编译执行,似乎已经提权成功,但由可能于蚁剑Shell功能不全,导致回退到当前低权限Shell

nc反弹Shell

Kali监听5555

蚁剑Shell执行

反弹成功

Root提权成功

执行exp,root提权成功

系统信息收集二

发现了monitor.py,根据网页上admin账号留言提到,他已经在靶机上运行了monitor.py文件

XMLRPC系统提权(方法二)

monitor.py代码审计

通过对monitor.py文件进行代码审计,发现该文件使用了SimpleXMLRPCServer模块,且还调用了大量的系统命令,其中在secure_cmd函数中,一但客户端猜对了passcode参数,便可以执行任意的操作系统指令。而这个passcode是1000-9999的一个随机数,所以我们可以暴力破解这个随机数从而达到提权的目的

构造monitor.py客户端test.py程序获取passcode

根据https://docs.python.org/zh-cn/3/library/xmlrpc.client.html#module-xmlrpc.client

xmlrpc.client - XML-RPC client access - Python 3.11.0 documentation

获取passcode为3786

再次构造test2.py程序反弹Shell

Kali监听5555

Shell反弹成功:

升级Shell交互性:

获取socnet用户权限

Root提权

信息收集

发现add_record文件是一个linux可执行程序,且具有sid和sig权限

另外,从互联网查询peda了解,peda是一款python动态调试工具,可能存在溢出提权的可能

尝试运行add_record程序

找到该程序有至少有4个可以交互输入的入口点Name,Years,Salary,in trouble?,Explain

断点调试

测试缓冲区溢出的用例:

程序正常退出,Name可能不存在溢出(exited normally)

Year可能也不存在溢出(exited normally)

Salary也不存在溢出(exited normally)

in trouble?也不存在溢出(exited normally)

Explain输入500个A后,程序出现溢出,如果将EIP寄存器中存在的AAAA替换成Payload就可以实现执行任意的命令

确认溢出位置

准备200个A

Explain处输入200个A,程序依然溢出

Explain处输入100个A,程序依然溢出

精确确认溢出位置

gdb生成100个特征字符

将特征字符写入Explain

定位溢出偏移量

构造测试字符

Explain处输入构造字符,可以确认

查看汇编代码

其中XXX@plt是系统内建函数

下断点分析程序功能

单步执行(执行1条指令)

删除断点,重新下断点

用类似方法理清程序的运行逻辑结构

发现一个自建函数,同时vuln这个名字刚好和脆弱这个英文单词比较相近vulnerable,可能存在漏洞

可疑函数

查看所有函数

发现该程序可以调用system()执行系统命令,setuid()提权等功能,命名 比较可疑的backdoor函数和vuln函数

查看vuln函数

通过互联网检索,strcpy()可能存在缓冲区溢出漏洞

查看backdoor函数

提权分析

经分析,可以使用主函数调用vuln()函数,vuln()函数调用strcpy()函数溢出,执行backdoor()函数中的系统命令执行提权

关于数据值与内存地址

EIP: 0x45444342 ('BCDE')

B对应的是42:EIP: 0x45444342 ('BCDE')

C对应的是43:EIP: 0x45444342 ('BCDE')

D对应的是44:EIP: 0x45444342 ('BCDE')

E对应的是45:EIP: 0x45444342 ('BCDE')

生成Payload

所以如果backdoor()函数的入口地址为0x08048676,那么我想把这个地址写入EIP寄存器就也应该倒着写,具体生成Payload如下:

退出gdb

目标靶机上生成Payload

再次运行gdb

发现执行了dash和bash

再次下断点,分析vuln()函数执行情况

漏洞产生原因分析:程序主程序含有一个vuln函数,由于vuln函数调用了strcpy系统内建函数,该存在缓冲区溢出漏洞。当我们在程序explain处输入过多的数据就产生溢出,从而将backdoor函数的入口地址写入EIP寄存器,从而实现加载backdoor函数。而backdoor函数调用了suid权限和system执行命令,以root宿主身份运行了/bin/bash,从而获取以root权限获取Shell。

执行Payload,提权root提权成功

反弹Shell

最后更新于

这有帮助吗?