0x00 前言
一道32位rop题,里面有个off-by-one
的细节,这次没有注意,下次一定好好看
0x01 漏洞分析
power_up
1 | int __cdecl power_up(char *dest) |
漏洞的关键在于strncat(dest, &s, 48 - *((_DWORD *)dest + 12));
,这个函数会在拼接后在结尾再加一个\x00
,所以就会把dest+12
中的内容覆盖成0,因此下一次调用power_up
仍然能够拼接,所以造成了栈溢出.
0x02 exp
1 | from pwn import * |