gets

32位仅部分开启RELRO保护


栈布局:
[ s[36] ] [ ebp ] [ 返回地址 ] |
声明了一个长度为 36 字节的字符数组 s,调用 gets 函数,并将 s 数组作为参数传递给它,然后将 gets 函数的返回值作为 ctfshow 函数的返回值。
这里是 28h,也就是 0x28,对于 32 位程序,我们 payload 还需要加 4 。
(根据程序是 32 位还是 64 位,对应加上 4 或 8 个字节的 ebp(栈底))
漏洞在于 printf(s) 直接使用文件内容作为格式字符串,这会导致:
- 如果文件内容包含格式化字符(如
%x,%p,%s),会泄露栈内存 - 可能造成内存崩溃(如使用
%n写入内存)
右键Text view
知道get_flag函数的地址在0x08048586
from pwn import * |

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Rhea's Blog!
评论





