Securinets CTF 2021:漏洞利用解析与技巧

需积分: 5 1 下载量 169 浏览量 更新于2024-08-26 收藏 117KB PDF 举报
"Securinets CTF Quals 2021的比赛解题报告,主要涉及一个名为'kill shot'的Pwn类题目,该题目是一个受到Seccomp保护的二进制程序,需要利用格式字符串漏洞泄露libc和栈地址,通过Write What Where技术将fastbin链接到栈上,获取fastbin中的chunk并最终弹出栈区域,最后通过ROP链来获得胜利。解题过程中使用了ptrlib库,并展示了部分Python代码用于交互和调试。" 在Securinets CTF Quals 2021比赛中,有一个高分题目【Pwn 810pts】kill shot,这个题目吸引了24位选手成功解决。这个挑战的关键在于利用一个二进制程序的漏洞来执行任意代码,最终获得系统控制权。以下是这个挑战的详细步骤: 1. **Seccomp保护的二进制程序**: Seccomp(Secure Computing)是一种Linux内核安全机制,用于限制进程的系统调用,提高系统的安全性。在这个挑战中,二进制程序受到了Seccomp的保护,增加了攻击的难度。 2. **格式字符串漏洞**: 攻击者发现了一个格式字符串漏洞,可以用来泄露内存中的信息。通过发送特定格式的输入,可以读取到libc和栈的地址。在提供的代码中,可以看到发送了`"%6$p.%25$p.%15$p\n"`这样的格式字符串,然后解析返回的数据来获取这些地址。 3. **泄露libc和栈地址**: 利用格式字符串漏洞,攻击者能够获取到libc基地址、栈地址以及canary值。这些信息对于后续的内存操作至关重要。 4. **Write What Where技术**: 接下来,攻击者需要找到方法修改内存中的数据。Write What Where允许攻击者指定写入的值、位置和长度,通常在利用过程中用于链接fastbin到栈上。 5. **fastbin链接到栈**: 利用fastbin(一个小块内存池)的管理漏洞,攻击者将fastbin的一个chunk链接到栈上,这为后续的内存操纵提供了条件。 6. **获取fastbin中的chunk**: 控制fastbin后,攻击者可以从fastbin中获取多个chunk,进一步操纵内存布局,直至能够弹出栈区域。 7. **ROP(Return-Oriented Programming)**: 通过以上步骤,攻击者已经准备好了必要的条件,可以构建一个ROP链。ROP是一种在DEP(数据执行保护)启用的环境中执行任意代码的技术,它利用已知的指令序列(gadgets)拼接成逻辑上的完整指令流。 8. **利用过程**: 最终,利用ROP链,攻击者可以执行自定义的代码,达到控制程序的目的,从而获得比赛的胜利。 在实际的CTF竞赛中,这种类型的问题需要对内存管理、漏洞利用、逆向工程和程序控制流有深入的理解。解题过程中,通常会用到如ptrlib这样的库来帮助交互和分析,以及像GDB这样的调试工具进行动态调试。此外,对libc的结构和函数地址的了解也是必不可少的。