主要逻辑只有一个 main 函数,允许输入 64 个字符的字符串(其实这是一个提示最后的 payload 是 64 个字节长度),接着在下面有一处很明显的格式化字符串漏洞,那么这里我们就可以输入 %x、%p 进行内存泄露。 int__cdeclmain(intargc,constchar**argv,constchar**envp){charformat;// [esp+0h] [ebp-48h]setvb...
(3)在 fclose 返回时 rdi 的地址处写入字符串 ‘/bin/sh\n’ ,这里要注意从高地址向地址写,因为这里的 rdi 低位数据里存放了堆的数据,修改掉之后会导致 fopen 异常; (4)修改 main 函数存放 for 循环次数的变量 i ,并且要求 i 的值满足:最后一轮向 fclose 返回的 rdi 地址写入数据后,main 函数的 for ...
i春秋的一篇关于格式化字符串文章把任意地址的读和写讲的很清晰: https://bbs.ichunqiu.com/thread-43624-1-1.html 方法一:先输入一个 %p 泄露出数组的首地址,再retn处下个断点,用返回地址减去数组的首地址,计算出他们之间的相对偏移。因为栈的地址每次都是变化的,所以我们每次都要泄露栈的地址,然后计算出返回...