DC-1(drupal)
发现主机
两种方法
-
arp-scan
arp-scan -l
-
nmap -sn(该参数表示只进行主机发现,不进行端口扫描)
nmap -sn 192.168.235.1-255
通常情况还是arp-scan好用一点,因为nmap还需要知道网络号信息。
端口扫描
-
nmap进行端口扫描
nmap -sV -A 192.168.235.136
可以看到开启了包括ssh、http在内的一些常用端口
先拿http开刀
web渗透尝试
进入该站点。发现使用的是drupal框架。Drupal是使用PHP语言编写的开源内容管理框架(CMF),它由内容管理系统(CMS)和PHP开发框架(Framework)共同构成,在GPL2.0及更新协议下发布。连续多年荣获全球最佳CMS大奖,是基于PHP语言最著名的WEB应用程序。
Drupal
-
可以先行查一下Drupal版本信息,对于更新不及时的网站可能会有某些web洞。
方法一:火狐插件Wappalyzer
方法二:扫描网站目录,找到robot.txt暴露出信息
这里我们只是用Wappalyzer查看其版本,暂用不到Wappalyzer的高级功能。
发现其Drupal版本为第七代,apache为web服务器。
-
所以可以利用咱们的MSF(metasploit framework)查一下近来的drupal漏洞。
先利用2019年最新的漏洞,但并没有建立起session
-
再利用2018年的那个漏洞,发现session建立成功,拿到了shell
可以看到我们得meterpreter组件已经成功运行,meterpreter也就是metasploit提供的一个非常强大的后渗透工具。
利用ls命令查看其文件
发现其中的flag1文件。
cat查看一下该文件。
其提示为"每一个良好的CMS(Content Management System 内容管理系统)都具有一个配置文件",所以我们可以查看其配置文件。
后渗透阶段
配置文件入手
经查证可知,drupal的配置文件一般在网站根目录下/sites/default文件夹中。
而真正的drupal配置文件就在settings.php中
发现了flag2,且不论flag2,在下面的信息中,我也看到了数据库相关的信息。
flag2提示内容:暴力破解和字典式攻击(dictionary attacks)并不是唯一的获取权限的方法。你会用如下这些凭证干些什么?
查数据库
如上图所示,数据库、数据库名、密码全都有了。那我们且进数据库一看。
meterpreter > mysql -u root -p
发现无MySQL命令环境,切换shell环境,获取系统的控制台shell
meterpreter组件下shell命令 :shell命令可以获取系统的控制台shell,如果目标系统上的命令行可执行程序不存在或禁止访问,那么shell命令会出错。
但是这种并不是交互式的shell,如果shell是带python环境的话,可以考虑通过pty.spawn()获得交互式shell
python -c "import pty;pty.spawn('/bin/sh')"
进入数据库
mysql -udbuser -pR0ck3t
下面是数据库的一系列查询操作,我们想要的尽可能在数据库找到一些有用的信息。
-
查数据库
show databases;
-
使用目标数据库
use drupal;
-
查看数据表
show tables;
找到类似于用户信息之类的用户表;
-
查表
select * from users;
可以看到,密码全是hash值,无法利用。
drupal密码重置
于是查找了一圈资料,发现了这个东西
在该文档中,介绍了两种重置drupal密码的方法其中的一种。一种是在index.php中引入password.inc的方法,另一种则是用passwd-hash.sh的方法。该文章中介绍的就是用passwd-hash.sh的方法
在Linux环境下,重置步骤如下
-
直接进入drupal的安装目录,运行如下命令
php ./scripts/password-hash.sh newpassword
在本靶机环境下drupal也就是安装在了网站根目录下。操作如下图所示。
到这一步,其实也就明白了改步骤的一部分原理了,据查证,drupal7和8的密码放入数据库中都是使用的SHA-512加盐的加密算法,加了什么”盐“不得而知。所以上面那个命令实际上是在使用drupal的哈希计算出我们想要的字符串的值,比如上图中也就是计算123456
在本靶机环境下的加盐哈希算法所得值。关键步骤来了,将数据库中pass部分的值替换为我们已知的这个加盐哈希值。
//数据库的改值操作忘了,回忆一下
update 表名 set 字段=新值,… where 条件
登入网站
使用该账号和我们设置的密码进入该站点。
找到了flag3文件,提示如下:特殊的PERMS(这是啥==)会帮助找到passwd,但是会需要我们执行一下该命令来查明阴影之中到底藏着什么东西。
查了一下资料,发现其内容跟我的理解确实有一点偏差。
其关键字其实有四部分PERMS、FIND、-exec、shadow
-
/etc/shadow
用于存储linux系统中用户的密码信息,又称为影子文件。这个文件跟
/etc/passwd
文件是息息相关的,由于该文件允许所有用户读取,易导致用户密码泄露,因此Linux系统将用户的密码信息从/etc/passwd
文件中分离出来,并单独放在的本文件中。而/etc/shadow/
文件只有root用户有读权限,其他任何用户都没有相关权限在该文件中,每行用户信息都被划分为了九个字段。每个字段含义如下。
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
-
FIND提权操作
提示之二,也就是用find进行提权操作。这是利用suid特殊权限提权方式中的一种。
-
suid
SUID(Set owner User ID up on execution)是给予文件的一个特殊类型的文件权限。在Linux中,当一个程序运行的时候,程序从登录用户处继承权限。SUID被定义为给予一个用户临时的(程序/文件)所有者的权限来运行一个程序/文件。简而言之就是用户在执行程序/文件/命令的时候,将获得文件所有者的权限以及所有者的GID和UID。
FIND提权
在linux /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。
cat一波,发现有一个用户名为flag4
-
首先利用find命令查找有suid权限的命令,参数为perm
find / -perm -4000
//find用法
# find path -option [ -print ] [ -exec -ok command ] {} \;
path:查找路径,默认为当前目录
option:查找条件,默认为当前目录中的所有文件
[print] 或 [exec] :查找动作,默认为显示
发现find命令是有suid权限的。
关于suid提权可以看下如下这篇文章
find ./ aaa -exec '/bin/sh' \;//-exec是find的一个参数,表示对找到的文件执行该命令
爆破Linux用户密码
先用cat查看一下shadow下的内容
Linux下的用户密码hash破解方法下面这篇文章提示
Linux 下的密码 Hash破解方法evil-hex的博客-CSDN博客hash解密
另外注意,pass部分的用$分隔,每个部分所表示的字段值意义也不尽相同。
第一部分表示加密算法,1表示MD5加密、5表示SHA-256加密、6表示SHA-512加密
第二部分表示随机序列号值,也就是slat盐值
第三部分就是随机序列号和密码共同加密后的字符串
下面的爆破就有两种思路
-
根据已知密文、盐值和加密哈希算法,可以自己写脚本用python的crypt库以及一些经典的字典来做碰撞
-
也可以使用22端口的ssh直接用hydra来爆破,但实际上的操作中,这种异常流量是会被IDS检测并拦截的。
挖个坑,后面再把python脚本补上,这里用第二种方法。
hydra -l flag4 -P /usr/share/john/password.lst ssh://192.168.235.136 -f -vV -o hydraflag4.ssh
catch我们的密码,利用ssh登录该用户
查看flag4文件
提示:你能用同样的方法得到root权限吗?也许没那么容易,又或许真的很容易?
再次利用find提权
利用同样的方法提权
其实到这一步整个渗透过程也差不多了,但我们要拿到最终旗帜
well done!