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
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值