缓冲区溢出示例疑问:内存加载顺序及auth_flag利用方式咨询
栈图字符串存储顺序说明
首先纠正两个常见的概念误区:
- 小端序规则仅适用于多字节数值类型(如
short、int、long等)的字节存储顺序,对单字节组成的字符串数组不生效。字符串本质是连续存储的单字节字符序列,存储逻辑固定为:字符串第0位字符存储在最低地址,后续字符依次向高地址递增排列,和大小端规则无关。比如字符串"ABCD"在内存中永远是低地址到高地址依次存0x41(A)、0x42(B)、0x43(C)、0x44(D),不会因为大小端改变顺序。 - 你对小端序的描述也存在小误差:小端序是多字节值的低有效字节存储在低地址,不是按比特位排序的,比特位在单个字节内部的顺序固定,和大小端无关。
你看到的栈图如果是展示字符串的存储布局,是完全正确的,和小端序规则没有冲突。
auth_flag修改方法说明
这是典型的栈溢出覆盖相邻变量场景,只要输入的字符串长度超过缓冲区的预留长度,就能覆盖缓冲区后方存储auth_flag的内存空间。
ASCII值为1的不可打印字符完全不影响漏洞利用,不需要通过键盘手动输入,你可以通过脚本构造包含任意字节的payload直接传递给目标程序,操作步骤如下:
- 先确认缓冲区起始地址到
auth_flag的内存偏移长度 - 用无关填充字节(比如大写字母A)把偏移空间完全填满
- 在填充内容末尾追加1字节的
\x01,即可把auth_flag的值覆盖为1
举个实际的利用示例,假设缓冲区到auth_flag的偏移为32字节,用Python构造payload并传递给程序的命令如下:
python -c 'print("A"*32 + "\x01")' | ./目标程序文件名
不存在不可利用的情况。
内容的提问来源于stack exchange,提问作者user16375427
相关产品推荐
相关产品推荐

