首先,我们没有 ASLR 和堆栈 cookie,并假设我们无法在此系统上创建自己的文件
所以我试图在这段代码中执行一个 shellcode,这是我到目前为止所做的:
我已经设法覆盖缓冲区并将函数 foo 的返回地址设置为函数关键,但我的问题是如何在此处运行特定的 shellcode?execv 将运行 bin/sh,但我不能用 shellcode 替换第一个参数,它不起作用,我不确定是否可以使用 execv 运行 shellcode,以及当我将 shellcode 传递给sh 它不起作用。
我也知道返回到 libc 漏洞,但仍然不知道如何使用 system() 执行 shellcode?甚至可以将shellcode传递给它吗?或者我可以使用另一个函数来传递一个shellcode给它?
我假设如果我们创建了自己的 shellcode 文件并替换了 sh 路径,我们就可以运行我们自己的 shellcode,但是我们无权创建文件,我们只能使用此代码来完成。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int bar(char *arg, char *out)
{
strcpy(out, arg);
return 0;
}
int foo(char *arg)
{
char buffer1[100]="Test program.\n";
char buffer2[100];
bar(arg, buffer2);
printf("%s",buffer1);
return 0;
}
void critical()
{
char *msg[]={"/bin/sh",NULL};
execv(msg[0],msg);
}
int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "prog_vuln2: argc != 2\n");
exit(EXIT_FAILURE);
}
foo(argv[1]);
return 0;
}