基本信息
靶机下载:https://download.vulnhub.com/dc/DC-1.zip
攻击机器:192.168.20.128(Windows操作系统)& 192.168.20.138(kali)
靶机:192.168.20.0/24
目标:获取2个flag+root权限
具体流程
信息收集
老样子首先使用arp-scan -l
对主机进行探活,发现主机IP为192.168.20.152
之后对开放的端口进行扫描,执行nmap -O -sV -p- -A 192.168.20.152
,结果如下所示
我们发现开放了22
、80
、111
、42289
端口,我们暂时先去看看80
端口给我们提供了什么有效的信息
我们发现其存在robots.txt
,我们访问robots.txt
,看看有没有什么关键信息,探寻了一圈后并没有发现什么有价值的信息,虽然那些文件都可以被访问到,但是并没有什么鸟用,然后我去网上搜了一下Drupal框架的历史漏洞,有一个CVE-2018-7600
远程代码执行漏洞和CVE-2019-6340
远程代码执行漏洞,但是网上的POC都没有什么用,如下所示
这个时候我们尝试使用msf上自带的漏洞攻击模块进行攻击,看看有没有能成功拿权限的漏洞
MSF上线
首先我们使用whatweb
查看一下版本号,这是kali自带的工具
我们可以知道这是Drupal 7 版本的,我们首先使用search Drupal 7
查找和这个cms系统相关的漏洞,如下所示
这里我们选择payload 1,我们输入use 1
即可
set rhosts 192.168.20.152
run
之后我们直接拿shell权限即可,我们输入shell,为了获得交互式控制,我们输入如下语句
python -c 'import pty;pty.spawn("/bin/bash")'
实现交互shell,如下所示
这里我们找到第一个flag,flag1.txt
,我们直接读取即可
Every good CMS needs a config file - and so do you.
权限提升
我们这里执行find / -perm -u=s -type f 2>/dev/null
看是否存在suid提权
这里面很显然是使用find进行suid提权,我们首先在当前目录下创建一个.sh
文件
touch ssh.sh
find ssh.sh -exec "/bin/sh" \;
执行后我们就可以发现成功提权
我们成功拿到最后的flag
Well done!!!!
Hopefully you've enjoyed this and learned some new skills.
You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7
当时我们还有flag2
和flag3
以及flag4
没找到,我们在home目录下发现一个flag4用户,下面有一个flag4.txt
,我们尝试读取
Can you use this same method to find or access the flag in root?
Probably. But perhaps it's not that easy. Or maybe it is?
我们试着使用find命令查找剩余的两个flag
find / -name "*flag*"
并没有发现其他两个flag的信息,我们看看flag1的提示吧,这几个flag应该是有递进关系的,第一个flag提示我们去config文件中看看,我们去找这个cms的配置文件即可
我们在网上可以查询到dural的配置文件位置,/sites/default/settings.php
,我们直接访问这个文件,发现里面确实存在flag2
Brute force and dictionary attacks aren't the
only ways to gain access (and you WILL need access).
What can you do with these credentials?
同时获得了数据库的账户密码,我们直接连接数据库
mysql -h localhost -u dbuser -pR0ck3t
我们在数据库中确实找到了管理员的登录账号密码,但是被加密了
通过flag2我们知道不能爆破密码,那我们就只剩下修改密码了,因为我们有数据库权限,我们可以直接讲修改的密码更新到数据库中,我们先尝试注册一个密码为123456的用户,然后直接在数据库里更新admin的密码,但是我们根本注册不了新用户,因为注册用户需要邮箱接收验证码,但是我们的邮箱并不能接收到验证码,所以我们只能尝试去找一找是怎么加密的了
我们直接运行相关命令,如下所示
php scripts/password-hash.sh 123456
加密出来$S$DBdjFBevhOwTeP.UcmRJMfef2lfNMPYS3ykCOaG2UKTkE2gCEAiL
,我们直接在数据库中执行
update drupaldb.users set pass="$S$DBdjFBevhOwTeP.UcmRJMfef2lfNMPYS3ykCOaG2UKTkE2gCEAiL" where name='admin';
之后我们尝试登录即可
成功发现flag3
Special PERMS will help FIND the passwd - but you'll need to -exec that command to work out how to get what's in the shadow.
至此所有flag都被成功找到
总结
- 框架漏洞的发现和利用
- 利用cms的特性进行管理员密码的更改