pwnable.kr 3.bof writeup

基本缓冲区溢出的利用。
拿到题目
在这里插入图片描述
访问下http://pwnable.kr/bin/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;
}

一个基本的栈溢出。将key的值覆盖为0xcafebabe即可得到shell。
访问http://pwnable.kr/bin/bof 得到可执行文件。
用ida反汇编查看char数组的首地址和key的地址的距离。
在这里插入图片描述
可以看到数组s的首地址是EBP-0x2c,画下此时的堆栈图
在这里插入图片描述
EBP-0xc处是canary保护(stack protector),canary的值如果被改变就会报错。
在这里插入图片描述
canary保护即是图中的
在这里插入图片描述
因为canary的关系,数组的首地址发生了改变,如果不反汇编就无法知道其到key地址的距离。
从堆栈图可以清晰的看到,数组的首地址到key的首地址的距离是52是字节,只需用52个字节填充,再加上0xcafebabe即可。
由于0xcafebabe转化为字符后不是可见字符,无法通过键盘打入,可以借助pwntools来编写利用代码。利用代码如下:
在这里插入图片描述
p32函数将0xcafebabe转化为\xbe\xba\xfe\xca,也可以直接写成\xbe\xba\xfe\xca
interactive函数是开启人机交互模式,取得shell权限后,使用此函数。
执行此脚本后即可得到shell
在这里插入图片描述
使用命令cat flag得到flag
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_43394612/article/details/85017433