[ISCC 2024] chaos_plus(堆栈结合)网上有师傅对 [ISCC 2024] chaos 进行了修改,抬高了 libc 版本至 2.35 并修改了部分函数,思路可以供自己去学习高版本 libc 的堆攻击,也认识了 Safe-Linking 基址机制。总而言之,是一道非常好的题目。 参考资料:https://blog.csdn.net/j284886202/article/details/139119047 chaos_plus(UAF libc-2.35) 程序分析:main12345678910111213141516171819202122232425262728293
SSP Leak & Fork96)wdb2018_guess(Fork&SSP Leak&environ) 12345678910111213141516171819202122232425262728293031323334353637383940414243__int64 __fastcall main(__int64 a1, char **a2, char **a3){ __WAIT_STATUS stat_loc; // [rsp+14h] [rbp-8Ch] BYREF __int64 n3_1; // [rsp+20h] [rbp-
glibc-2.32 malloc(): unaligned tcache chunk detected从 glibc 2.32 版本开始,官方在 malloc 从 Tcache 中取出内存块的代码里加了一行检查:取出的内存地址,必须能够被 16 整除(也就是地址的最后一位必须是 0)。 如果最后一位不是 0(比如你这里的 8),glibc 会立刻判定 Tcache 链表被黑客破坏,并抛出如下致命报错:malloc(): unaligned tcache chunk detected 随后程序直接 abort() 退出,你的利用链就此中断。 我们可以看一道题去了解这个报错: 在 [ISCC 2
Overlap 2.23libc 例题参考资料:https://www.cnblogs.com/youdiscovered1t/p/19109746 babyheap_0ctf_2017(Unsortedbin + Overlap) 简单整理一下 main 函数: 123456789101112131415161718192021222324252627282930313233__int64 __fastcall main(char *a1, char **a2, char **a3){ char *v4; // [rsp+8h] [rbp-8h] v4 = mmap_();
—BlindROP 盲打例题参考资料:https://www.cnblogs.com/HX-Note/p/17291361.html axb_2019_brop64首先连接一下远程环境,看一看程序会发送出来什么信息,我们又需要输入什么,先了解程序的基本运行流程: 寻找程序的偏移量:这里我们可以看到,在 Please tell me: 后用户可以进行字符串的输入,之后会返回 Repeater 和 GoodBye。我们从偏移为 1 开始暴力枚举,当程序崩溃的时候代表缓冲区已经填充满,-1 即为最大填充长度,也就是偏移: 12345678910111213141516171819from pwn i
绕过防御之击败PIE保护PIE的介绍Position-independent executable 地址无关可执行文件,该技术就是对于代码段、text 段、data 段、.bss 段等固定地址的一个防护手段,应用了 PIE 的程序在每次加载时都会变换加载基址,从而使 ropper 等工具无法得到准确的地址的一种防护。 但注意:PIE 只是 “整体偏移随机”,程序内部的相对地址不变! tip) 在计算机中,内存地址本质是一串二进制数(比如 64 位系统中是 64 位二进制),“最后 12 位” 就是这串二进制数的最低 12 位(最右侧的 12 位)。 也可以认为成是十六进制的最后 1.5 位
绕过防御之击败canary保护canary的认识和原理函数在开始执行的时候会先往栈底插入 cookie 信息,当函数真正返回的时候会验证 cookie 信息是否合法,即栈帧销毁前测试该值是否被改动,如果不合法就停止运行。在 Linux 系统当中我们将这段 cookie 信息称为 Canary Canary 是一个低字节位 \x00 的十六进制数。 由于 Canary 在局部变量的后面,在 EBP 或 RBP 的前面,所以当攻击者覆盖返回地址的时候往往也会将 cookie 信息给覆盖掉,这就会导致栈保护检查失败而阻止 payload 的运行,从而避免漏洞被利用成功 123456789101112
程序员的基本素养编译和链接编译一个程序会使用gcc,假设我们编译c文件,那么编译命令会是Gcc test.c 中间会发生一个过程四个步骤(预处理,编译,汇编和链接) 装载 动态链接 调试gdb的使用 更新: 2025-12-12 20:04:58原文: https://www.yuque.com/idcm/wnemg9/wnmpsh0ba2p56stv
简单栈溢出原理和攻击手段什么是栈溢出?栈溢出的本质是:向栈上的局部变量写入了超出其分配空间的数据,导致这些多余的数据”溢出”到栈上的娶她区域,覆盖率关键信息(比如返回地址、函数参数)。 最基本的就是缓冲区溢出 **缓冲区溢出:**缓冲区溢出就是输入过长的数据到缓冲区,导致缓冲区的其他数据遭到破坏。 **栈是计算机系统的数据结构,**按照先进后出的原则存储数据,先进入的数据被压入栈底,后放入的数据在栈顶,就像叠盘子一样总是取最上面的,先放入的盘子总是被压在最下面。 _**PUSH POP **_push 和 pop 分别是进栈和出栈 _**ESP/RSP **_栈指针寄存器,其中存
对于send和sendline的思考 动作类型 常用函数 是否依赖/产生 \n 攻击时的注意点 输入 (Input) read(0, buf, n) 不依赖 只要发够 n 个字节就行,不加 \n 也能跑。 输入 (Input) gets / scanf 极度依赖 必须加 \n,否则程序死等,脚本卡死。 输出 (Output) printf 不自动加 泄露数据时,后面可能紧跟其他字符串,不好拆分。 输出 (Output) puts 自动加 \n 泄露数据非常干净,因为 \n 会把数据“推”出来。 特性 send(data) sendline(d