栈的相关知识
栈在程序用户空间的最高地址处,有一个LIFO(Last In First Off)后进先出的特点
格式化字符串漏洞
0x01. 前置栈知识通过前面的函数调用细节以及栈中数据的分布情况,我们可以发现,局部变量是在栈中挨个排放的,如果这些局部变量中有数组之类的缓冲区,并且程序存在数组越界的问题,那么越界的数组就有可能破坏栈中相邻变量的值,进而破坏EBP的值、返回地址等重要数据。 ![[Pasted image 20260325082234.png]] 0x02. 格式化字符串漏洞原理首先,什么是格式化字符串呢,举个简单的例子: 1printf("CTF(Capture the flag) is DEAD!"); 执行该函数后将返回字符串:CTF(Capture the flag) is DEAD!该printf函数的第一个参数就是格式化字符串,它来告诉程序将以什么格式输出。printf()函数的一般形式为:printf("format" , 输出列表),我们对format比较关心,它的结构是:% {标志}{输出最小宽度}{.精度}{长度}类型,其中跟格式化字符串漏洞有关系的主要有以下绩点: 输出最小宽度:用十进制整数来表示输出的最少位数。若实际位数多...
脚本中变量前缀名的含义
各前缀的具体用途1. io.xxx:与目标程序的交互操作io 是交互句柄的简写(全称 I/O,输入 / 输出),所有和目标程序的通信都通过它完成,核心方法: 常用方法 作用 示例 io.send() 发送数据到目标程序 io.send(b"AAAA") io.sendline() 发送数据 + 换行(等价于 send (b”AAAA\n”)) io.sendline(b"cat flag") io.recv() 接收目标程序输出(指定长度) io.recv(1024) io.recvuntil() 接收直到匹配指定字符串 io.recvuntil(b"Password:") io.interactive() 切换到交互模式(手动输入命令) io.interactive() io.close() 关闭连接 / 进程 io.close() 2. p.xxx:数据类型转换(打包 / 解包)p 是pack的简写,核心解决整数 ↔ 字节串的转换(PWN 中...







