文章索引(SEO) Post Index (SEO)
最新文章 Latest Posts
FD FD
本文记录了 pwnable.kr 中 fd 题目的解题过程。这道题核心考察 Linux 系统中的文件描述符(File Descriptor)机制 。通过代码审计发现,程序利用 read(fd, buf, 32) 获取输入与目标字符串比对。为了能够从终端手动输入 LETMEWIN 字符串,我们需要让 fd 的值等于 0(即标准输入 stdin)。由于程序中 fd = atoi(argv[1]) - 0x1234,解题的关键就是将十六进制 0x1234 转换为十进制的 4660 作为参数传入,从而成功控制 read 函数读取标准输入,顺利拿下 flag! 本文记录了 pwnable.kr 中 fd 题目的解题过程。这道题核心考察 Linux 系统中的文件描述符(File Descriptor)机制 。通过代码审计发现,程序利用 read(fd, buf, 32) 获取输入与目标字符串比对。为了能够从终端手动输入 LETMEWIN 字符串,我们需要让 fd 的值等于 0(即标准输入 stdin)。由于程序中 fd = atoi(argv[1]) - 0x1234,解题的关键就是将十六进制 0x1234 转换为十进制的 4660 作为参数传入,从而成功控制 read 函数读取标准输入,顺利拿下 flag!
Passcode Passcode
本文记录了 pwnable.kr 中 Passcode 题目的解题过程。核心漏洞在于 scanf 缺少 & 符且变量未初始化,结合 welcome 与 login 函数调用时的栈帧重用特性 ,攻击者通过在 name 数组中输入 96 字节进行填充,精准将 passcode1 的内存内容覆盖为 fflush 的 GOT 表地址。随后,利用 scanf 将包含 system("/bin/cat flag") 的目标指令地址(需转换为十进制整数)写入该 GOT 表 。当程序随后调用 fflush 时,控制流被成功劫持,顺利输出 flag。 本文记录了 pwnable.kr 中 Passcode 题目的解题过程。核心漏洞在于 scanf 缺少 & 符且变量未初始化,结合 welcome 与 login 函数调用时的栈帧重用特性 ,攻击者通过在 name 数组中输入 96 字节进行填充,精准将 passcode1 的内存内容覆盖为 fflush 的 GOT 表地址。随后,利用 scanf 将包含 system("/bin/cat flag") 的目标指令地址(需转换为十进制整数)写入该 GOT 表 。当程序随后调用 fflush 时,控制流被成功劫持,顺利输出 flag。
Random Random
本文记录了一道利用 C 语言伪随机数漏洞的经典 CTF 题解。由于程序未调用 srand() 设置随机数种子,导致 rand() 每次执行生成的初始随机数固定不变(在标准 glibc 环境中固定为 0x6b8b4567) 。利用异或运算的可逆特性,通过 key = random ^ 0xcafebabe 逆向推导出目标值,最终将其转换为十进制 2708864985 提交,轻松绕过 if 判断语句并获取 flag。解题思路非常清晰干脆! 本文记录了一道利用 C 语言伪随机数漏洞的经典 CTF 题解。由于程序未调用 srand() 设置随机数种子,导致 rand() 每次执行生成的初始随机数固定不变(在标准 glibc 环境中固定为 0x6b8b4567) 。利用异或运算的可逆特性,通过 key = random ^ 0xcafebabe 逆向推导出目标值,最终将其转换为十进制 2708864985 提交,轻松绕过 if 判断语句并获取 flag。解题思路非常清晰干脆!
Bof Bof
本文记录了 pwnable.kr 中 bof 题目的解题过程。核心漏洞在于程序使用了不安全的 gets() 函数且未做长度校验,导致经典的栈溢出漏洞 。通过使用 GDB 进行动态调试,计算出用户输入缓冲区的起始地址与目标变量 key 的内存地址之间的偏移量为 52 个字节。最终,利用 Python 的 pwntools 库编写 EXP,向远程端口发送构造好的 Payload(52 字节的无用字符填充 + 目标值 0xcafebabe),成功覆盖关键变量并获取了交互式 Shell。 本文记录了 pwnable.kr 中 bof 题目的解题过程。核心漏洞在于程序使用了不安全的 gets() 函数且未做长度校验,导致经典的栈溢出漏洞 。通过使用 GDB 进行动态调试,计算出用户输入缓冲区的起始地址与目标变量 key 的内存地址之间的偏移量为 52 个字节。最终,利用 Python 的 pwntools 库编写 EXP,向远程端口发送构造好的 Payload(52 字节的无用字符填充 + 目标值 0xcafebabe),成功覆盖关键变量并获取了交互式 Shell。
Collision Collision
本文记录了 pwnable.kr 中 Collision (col) 题目的解题过程。核心考点是 C 语言的指针类型转换机制与内存的字节序排布。程序将输入的 20 字节字符数组强制转换为 5 个 32 位 int 型整数并求和 。为了使求和结果等于目标哈希值 0x21DD09EC,解题思路巧妙地利用了简单的数学拆分,将目标值分为 4 个 113626825 与 1 个 113626824。最后,将其转换为小端序(Little Endian)十六进制机器码拼接作为参数传入,成功绕过哈希校验并获取 flag。 本文记录了 pwnable.kr 中 Collision (col) 题目的解题过程。核心考点是 C 语言的指针类型转换机制与内存的字节序排布。程序将输入的 20 字节字符数组强制转换为 5 个 32 位 int 型整数并求和 。为了使求和结果等于目标哈希值 0x21DD09EC,解题思路巧妙地利用了简单的数学拆分,将目标值分为 4 个 113626825 与 1 个 113626824。最后,将其转换为小端序(Little Endian)十六进制机器码拼接作为参数传入,成功绕过哈希校验并获取 flag。