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 | |

看到两台之前不在此网段的机器
192.168.111.80是WEB服务器,先对他进行端口扫描

看到开放了1433和7001端口,7001端口运行WebLogic服务
访问http://192.168.111.80/也可以看到只是一个空页面,没有什么功能,打开时都没有加载js文件
使用WebLogicScan扫描一下

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

成功上线一个session

上线cs
现在把他在cs上线
本来是想利用powershell加载远程服务器脚本,但是一直显示Unableconnect
执行了一下tasklist命令,发现有360杀毒软件进程
1 | |
主动防御进程较难终止,我们尝试一下上传木马绕过
尝试了很多方法,最后用cs生成了raw格式的bin文件,使用kali将文件内容用base64编码,编写一个powershell可执行脚本,使用msf上传后执行成功
payload->payload generator(stageless)
1 | |
这个木马不能使用分段下载,会被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 | |
看到两台主机都开了135和445端口
由于网络配置有问题,101010.201无法与其他两台主机互通
现在直接使用psexec对DC jump

上线成功
直接使用hashdump获得krbtgt的用户凭据,可以制作黄金票据
知识点
为什么上传ps1脚本能成功运行且回连
- 绕过了“文件落地”的黑名单扫描
- EXE 加载器的问题:像
c.exe这种文件,由于它是独立的可执行程序,360 会在它落地的瞬间扫描它的文件头(PE Header)、哈希值和导入表。如果这个工具被收录过,或者它的签名不可信,360 会直接拦截。 - PowerShell 的优势:你上传的是一个
.ps1脚本,本质上是一个文本文件。360 对文本文件的静态查杀强度远低于二进制 EXE。脚本中的 Shellcode 以 Base64 字符串形式存在,在静态扫描看来只是一串“乱码”,无法直接匹配到病毒特征。
- 借用了“白名单进程”的身份
powershell.exe是 Windows 系统自带的合法的、带有微软签名的程序。- 当你运行脚本时,真正申请内存、执行指令的进程是
powershell.exe。360 很难直接封杀这个进程,因为它也是很多系统管理任务的基础。相比于一个来路不明的c.exe,powershell.exe拥有更高的默认信任等级。
- 内存加载(Fileless)的隐蔽性
- 传统方式:加载器通常会创建新进程或注入其他进程。这些动作(
OpenProcess、CreateRemoteThread)是 360 主动防御监控的重灾区。 - PowerShell 方式:脚本通过 .NET 接口调用 Win32 API(如
VirtualAlloc),直接在当前 PowerShell 进程自己的内存空间里开辟地方并运行。 - 这种“自加载”行为不涉及跨进程操作,对于安全软件来说,识别“一个合法进程在自己家里干坏事”要比识别“一个进程去干扰另一个进程”难得多。
- 动态解析与执行
- 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 | |
- 445 Open:恭喜,直接用
jump psexec配 SMB 监听器,这是最稳的。 - 135 Open, 445 Closed:尝试
jump wmi或jump wmi64。 - 全部 Closed:说明对方防火墙极其严格。你可能需要寻找该机器上运行的其他服务(如 Web 漏洞)来切入,或者利用已经拿下的用户进行“令牌窃取”。
总结
感觉这个靶场最难的地方是绕过360上线cs,其他地方没有什么比较特别的东西,用cs集成模块和msf的漏洞利用模块就可以直接getshell