DC-1(drupal)

DC-1

发现主机

​ 两种方法

  • 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密码重置

​ 于是查找了一圈资料,发现了这个东西

drupal7 密码重置 | Drupal China

​ 在该文档中,介绍了两种重置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提权可以看下如下这篇文章

简谈SUID提权 - FreeBuf网络安全行业门户


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!

 

 

 

 
posted @ 2022-04-05 20:33  三木森林  阅读(203)  评论(0编辑  收藏  举报