我的CTF刷题笔记和心得总结记录了作者在网络安全竞赛中的学习历程与实战经验,涵盖各类解题技巧、策略分析及团队合作等多方面内容。
### CTF刷题WP笔记解析
#### 1. SWPUCTF 2021 新生赛 —— whitegive_pwnV1
本题目聚焦于一个典型的CTF比赛中的二进制漏洞利用挑战,名为“whitegive_pwnV1”。通过对题目描述的解读,我们可以深入分析其中涉及的重要概念和技术细节。
##### 一、背景介绍
- **题目概述**:“whitegive_pwnV1”是SWPUCTF 2021新生赛的一个二进制漏洞利用题目。题目给出的二进制程序大小为0x10+0x8,旨在覆盖rbp(基址指针),然后寻找返回地址来定位一个可利用的漏洞。
- **关键概念**:
- **rBP**: 在函数调用过程中用于标记栈帧的顶部,是栈帧边界的一个标志。
- **返回地址**: 函数调用后返回的地址,通常位于函数调用现场保存的栈中。
- **GOT表**: Global Offset Table(全局偏移表),在ELF格式的程序中用于存储外部函数和变量的地址,以便于动态链接时进行重定位。
- **PLT表**: Procedure Linkage Table(过程链接表),包含了一些特殊的指令,用于实现动态链接过程中的跳转。
##### 二、技术细节解析
- **公共漏洞**:“public vuln”在这里指的是公开的漏洞,即程序中存在的已知安全缺陷,这些缺陷可能被攻击者利用来进行未授权访问或数据破坏。
- **GOT表泄露攻击原理**:
- **动态链接原理**: 在程序运行时,对于外部调用如`printf`等函数,编译时不知道具体的地址,只知道其在`.plt`表中的位置。当第一次调用这些函数时,程序会通过`.plt`表跳转到`.got.plt`中存储的地址,并完成重定位。
- **攻击思路**: 攻击者可以通过控制输入使返回地址被覆盖指向`.plt`中的某个条目,从而控制程序流并利用泄露的信息。
##### 三、具体技术应用
- **泄露GOT表**:通过某种方式修改程序的返回地址使其指向前述位置以达到泄露目的。
- **重定位机制**: 在加载时,`.got`中存放的是需要进行重定位的地址信息。对于外部函数调用,除了`.got`外还需要通过`.plt`条目完成跳转。
- **利用LibcSearcher库**:为了确定libc版本及其基址,攻击者会使用该库搜索并匹配libc中的函数地址以计算出其在内存中的基地址。
##### 四、示例代码解析
- **pwntools函数**: `recvuntil`用于接收socket数据直到遇到特定字符串。例如`data.recvuntil(bx7f)`表示从`data`接收数据直至遇到字节`x7f`
- **数据处理**: 从接收到的数据中提取最后六个字节,并将其左对齐扩展至8字节,不足部分用0填充。
- `[-6:]`: 获取最后六个字节
- `.ljust(8, bx00)`: 将字符串左对齐并扩展为8个字节
“whitegive_pwnV1”题目不仅考察参赛者的二进制漏洞利用能力,还要求他们掌握GOT表泄露、动态链接和pwntools等关键技术。通过上述知识点的了解,参赛者可以更好地理解和解决此类问题。