IT大白鼠头像
渗透测试实战从靶场搭建到渗透流程——第 2 篇 · 攻击机部署与网络配置封面图

渗透测试实战从靶场搭建到渗透流程——第 2 篇 · 攻击机部署与网络配置

一、网络拓扑总览

本系列的网络结构非常简单:一台 VMware 宿主机跑两台虚拟机,同处 10.10.10.0/24 实验网段,网关 10.10.10.2,与办公网和互联网完全隔离。

角色

主机

地址

说明

攻击机

Kali Linux(kali-peng)

10.10.10.110

所有渗透操作从这里发起

靶场宿主

Rocky Linux 9.8(pxg)

10.10.10.240

第 1 篇已搭好 15 个常驻靶场

网关

VMware 虚拟网络

10.10.10.2

两台虚拟机的默认路由

攻击机的地址要固定下来。实验环境中虚拟机数量多、IP 资源紧张,采用「IP 复用 + 不同时开机」策略:同一 IP 可以登记多台机器,但同一时刻只开一台。为了不踩 ARP 冲突,攻击机 IP 必须静态固定,而不是依赖 DHCP。

二、Kali 安装与静态 IP 配置

Kali 用官方镜像安装即可(本系列使用 Kali Rolling,内核 6.x)。装完第一件事不是装工具,而是把 IP 固定。

2.1 改静态 IP:用 NetworkManager,别碰 interfaces 文件

Kali 的有线网卡由 NetworkManager 托管,/etc/network/interfaces 只管回环。改 IP 有一条命令就够——先备份,再修改,最后激活:

# 1. 备份 NetworkManager 连接文件(改动前必备)

cp "/etc/NetworkManager/system-connections/Wired connection 1" /root/net-backup/

# 2. 一条命令落 IP、网关、DNS

nmcli con mod "Wired connection 1" \

  ipv4.method manual ipv4.addresses 10.10.10.110/24 \

  ipv4.gateway 10.10.10.2 ipv4.dns "10.10.10.2,8.8.8.8"

# 3. 激活生效(持久,重启不丢)

nmcli con up "Wired connection 1"

验证:ip -4 -o a 确认 eth0 是 10.10.10.110/24;nmcli -g ipv4.method,ipv4.addresses,connection.autoconnect con show "Wired connection 1" 应输出 manual、地址与 yes(autoconnect 开启,开机自动生效)。

2.2 确认连通性

ping -c 2 10.10.10.240                      # 到靶场宿主

cat /etc/os-release | head -1               # Kali GNU/Linux Rolling

hostname                                    # kali-peng(认机看主机名,不靠 IP)

IP 复用环境下,「连的是哪台」不看 IP 看主机名:靶场宿主是 pxg,Kali 是 kali-peng。这个习惯在多机实验网段里能避免大量张冠李戴。

三、工具部署清单

Kali 官方仓库即可装齐本系列所需工具。按用途分组核对:

类别

工具

用途

信息收集

nmap、masscan、dirsearch、feroxbuster、ffuf、whatweb

端口扫描、目录爆破、指纹识别

Web 漏洞

sqlmap、burpsuite、zaproxy

注入、抓改包、自动化扫描

漏洞框架

metasploit-framework

vsftpd/Samba/Tomcat 等模块化利用

口令破解

hydra、john、hashcat、crunch、cewl

在线/离线口令破解

内网横向

impacket、netexec、evil-winrm、responder

内网凭据与横向移动

浏览器利用

beef-xss

XSS 结合浏览器劫持

字典

seclists、wordlists(rockyou)

爆破与目录爆破字典

# 常用工具安装(Kali 仓库)

apt update && apt install -y dirsearch feroxbuster ffuf whatweb \

  sqlmap burpsuite zaproxy hydra john hashcat seclists

# 字典确认

ls /usr/share/wordlists/rockyou.txt         # 解压后使用

ls /usr/share/seclists/ | head

Burp Suite 浏览器代理默认监听 127.0.0.1:8080,与靶场端口不冲突(靶场在 240 上)。浏览器需配置代理指向它并安装 Burp 证书,这是后续抓改包的前提。

四、Metasploitable2 服务补全:端口通不等于服务可用

第 1 篇留了一个尾巴:Metasploitable2 容器(镜像 tleemcjr/metasploitable2)的原始启动配置只会拉起 4 个服务,其余十几个服务全靠手工补。这一节完整讲清现象、根因和最终方案。

4.1 现象:探测全通,服务全瘫

容器显示 Up,宿主机 12 个映射端口用 /dev/tcp 探测全部 OK,但访问 http://10.10.10.240:8180/ 返回 000,MySQL 客户端报 Can't connect。

关键认知:Docker 的端口发布由 docker-proxy 在宿主机监听,即使容器内进程没起来,宿主机 TCP 也能建连——这是「假通」。判断服务必须协议级验证:HTTP 用状态码、SSH/FTP/SMTP 读 banner、数据库跑一条 SQL。

4.2 根因:三个连环坑

坑一:镜像的 /etc/rc.local 只拉起 rmiregistry、unrealircd、vncserver、druby 四个服务。apache2、mysql、ssh、samba、tomcat、proftpd 等全都不会自动启动,必须逐个跑 /etc/init.d/服务名 start。

坑二:容器内没有 timeout 命令。这是 Ubuntu 8.04 时代的老系统,coreutils 里根本没有 timeout。启动脚本若用 timeout 25 做保护,结果 18 个服务日志里全是 command not found,静默失败一个都没起来。老容器里保护要用「后台并发 + 独立日志」替代。

坑三:docker exec 前台跑 init 脚本会卡死。老 Init 脚本自身会等待,逐个前台执行会拖到超时。解法:每个服务用后台方式启动,互不阻塞。

4.3 最终方案:启动脚本 + compose 外挂

写一个启动脚本挂载进容器,由 compose 的 command 执行。每个服务后台启动、日志独立落盘,Tomcat 5.5 启动极慢(jsvc 方式需 2~4 分钟),放在最后单独启动:

#!/bin/bash

# /data/pentest/lab/msf2-start.sh

for svc in sysklogd klogd bind9 ssh portmap mysql postgresql-8.3 distcc \

           openbsd-inetd postfix rsync samba snmpd xinetd proftpd atd cron apache2; do

  [ -x /etc/init.d/$svc ] && ( /etc/init.d/$svc start >/tmp/init-$svc.log 2>&1 ) &

  sleep 2

done

sleep 20

( /etc/rc.local >/tmp/rc-local.log 2>&1 ) &          # RMI / unrealircd / vnc / druby

[ -x /etc/init.d/tomcat5.5 ] && ( /etc/init.d/tomcat5.5 start >/tmp/init-tomcat5.5.log 2>&1 ) &

sleep 15

echo "LAB START DONE $(date)" >> /tmp/lab-boot.log

exec tail -f /dev/null

compose 中的接法(原 command 只跑 rc.local 是「服务只有 4 个」的元凶,必须替换并挂载脚本):

  metasploitable2:

    image: tleemcjr/metasploitable2

    container_name: metasploitable2

    command: ["/bin/bash", "/root/msf2-start.sh"]

    volumes:

      - "./msf2-start.sh:/root/msf2-start.sh:ro"

    ports: ["2121:21", "2222:22", "2323:23", "2525:25",

            "8180:80", "8181:8180", "1139:139", "1445:445",

            "11099:1099", "33306:3306", "15432:5432", "5901:5900", "6200:6200"]

    networks: [pentest-net]

    restart: unless-stopped

改了 command 必须 force-recreate(restart 不会重读 command):

docker compose up -d --force-recreate metasploitable2

docker exec metasploitable2 cat /tmp/lab-boot.log    # 看到 LAB START DONE 即脚本跑完

4.4 验收:协议级逐项核对

宿主端口

服务

验收方式与预期

2121

vsftpd 2.3.4

banner 应为 220 (vsFTPd 2.3.4)

2222

OpenSSH 4.7p1

banner 应为 SSH-2.0-OpenSSH_4.7p1 Debian

2525

Postfix

banner 应为 220 metasploitable.localdomain ESMTP

8180

Apache 2.2.8

curl 返回 200(DVWA/Mutillidae/phpMyAdmin 页面)

8181

Tomcat 5.5

curl 返回 200,tomcat/tomcat 可登 Manager

33306

MySQL 5.0.51a

mysql -uroot -e 版本查询返回 5.0.51a-3ubuntu5

15432

PostgreSQL 8.3

连接提示 PostgreSQL 8.3.1

1139/1445

Samba 3.x

139/445 监听

5901

VNC

监听正常,口令 password

6200

vsftpd 后门

平时不存在,触发后门后才短暂出现(勿探测)

两个必记的端口事实:宿主机 8180 是容器内 Apache:80(DVWA 等),宿主机 8181 才是容器内 Tomcat:8180。新手最常在这里绕圈——对着 8181 找 DVWA、对着 8180 部署 WAR,自然处处碰壁。

另一个耐心活:容器刚起来时 curl 8181 返回 000 属正常,Tomcat 5.5 通过 jsvc 启动需要 2~4 分钟,不要误判为失败。另外判断 Tomcat 死活别用 ps 找 java——它的进程名是 jsvc。

五、全链路连通验收

攻击机与靶场就位后,从 Kali 做一次全链路验收,作为后续所有篇章的基线:

# 1) Web 靶场批量探活(HTTP 状态码)

for p in 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091; do

  echo -n "$p -> "; curl -s -o /dev/null -w "%{http_code}" --max-time 6 \

    -L http://10.10.10.240:"$p"/; echo

done

# 2) MSF2 关键服务 banner 核对

printf "QUIT\r\n" | nc 10.10.10.240 2121 | head -1     # 220 (vsFTPd 2.3.4)

exec 3<>/dev/tcp/10.10.10.240/2222; head -1 <&3; exec 3<&-   # SSH banner

# 3) 数据库靶标(MySQL 客户端连 8.0 必加 --skip-ssl)

mysql -h10.10.10.240 -P3307 -uroot -proot --skip-ssl -e "select version();"   # 5.7.44

redis-cli -h 10.10.10.240 -p 6380 ping                                        # PONG

全部符合预期即基线成立。至此环境层完工:宿主机 15 个常驻容器(含 Metasploitable2 全服务)、攻击机固定 IP 且工具齐备。下一篇正式开打——从 sqli-labs 的 Less-1 开始,看见 SQL 注入是怎么发生的。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_28608175/article/details/168947439

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--