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:8000和http://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代码审计通过对monitor.py文件进行代码审计,发现该文件使用了SimpleXMLRPCServer模块,且还调用了大量的系统命令,其中在secure_cmd函数中,一但客户端猜对了passcode参数,便可以执行任意的操作系统指令。而这个passcode是1000-9999的一个随机数,所以我们可以暴力破解这个随机数从而达到提权的目的
构造monitor.py客户端test.py程序获取passcode值
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
test2.py程序反弹ShellKali监听5555
Shell反弹成功:
升级Shell交互性:
获取socnet用户权限
Root提权
信息收集
发现add_record文件是一个linux可执行程序,且具有sid和sig权限
另外,从互联网查询peda了解,peda是一款python动态调试工具,可能存在溢出提权的可能
尝试运行add_record程序
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函数,由于vuln函数调用了strcpy系统内建函数,该存在缓冲区溢出漏洞。当我们在程序explain处输入过多的数据就产生溢出,从而将backdoor函数的入口地址写入EIP寄存器,从而实现加载backdoor函数。而backdoor函数调用了suid权限和system执行命令,以root宿主身份运行了/bin/bash,从而获取以root权限获取Shell。
执行Payload,提权root提权成功
反弹Shell
最后更新于
这有帮助吗?