buu做题记录 bjdctf-2020-babyrop2checksec 可以看到有开canary,可能需要绕过 IDA 12345678910111213unsigned __int64 gift(){ char format[8]; // [rsp+0h] [rbp-10h] BYREF unsigned __int64 v2; // [rsp+8h] [rbp-8h] v2 = __read 2025-02-19 做题记录
malloc源码学习 5.1边界标记法 size_t 32位下4字节,64位下4字节或8字节 分配chunk必须与2*SIZE_SZ(size_t)对齐 倒三倒四的#是用来处理chunk地址对齐的宏 ==32平台下chunk地址按8字节对齐,64位按8字节或16字节对齐== 使用结构体来描述这些chunk prev_size:前一个块是空闲时,表示前一个块大小,若不空闲则 2025-02-09 2025冬令营
格式化字符串 格式化字符串利用原理基本格式1%[parameter][flags][field width][.precision][length]type parameter n$,获取格式化字符串中的指定参数 12345例如int a=0x1111,b=0x2222,c=0x3333;printf("%3$p",a,b,c)//按理来说输出的是0x3333//但我自己执行的时候输出 2025-02-04 #格式化字符串
堆 heap堆简介 提供动态分配的内存 堆其实就是程序虚拟地址空间的一块连续的线性区域,它由低地址向高地址方向增长(栈是高地址向低地址)。我们一般称管理堆的那部分程序为堆管理器。 只有当真正访问一个地址的时候,系统才会建立虚拟页面与物理页面的映射关系 所以虽然操作系统已经给程序分配了很大的一块内存,但是这块内存其实只是虚拟内存。只有当用户使用到相应的内存时,系统才会真正分配物理页面给 2025-01-28 2025冬令营
shellcode shellcode原理 就是一段可以插入到程序或系统中并被执行的代码,shellcode的作用就是getshell 编写64位 1234567mov rax,0x68732f6e69622f ;这里后面那一大串是/bin/shpush raxmov rdi,rsp ;这两行使rdi指向/bin/shxor rsi,rsixor rdx,rdxmov rax,0x3bsyscall 插入1 2025-01-26 2025冬令营
栈溢出 原理原理: 利用危险函数,将返回地址填充到栈帧上的返回地址,从控制该函数结束时返回到的地方 危险函数 输入 gets,直接读取一行,忽略’\x00’ scanf vscanf 输出 sprintf 字符串 strcpy,字符串复制,遇到’\x00’停止 strcat,字符串拼接,遇到’\x00’停止 bcopy 初级栈溢出ret2text利用.text段中的代码 确定填充长度后 2025-01-22 2025冬令营