在 C 编程语言中,对于 execve:
int execve(const char *filename, char *const argv[],
char *const envp[]);
我们如何使用 envp 进行漏洞利用?
其次,当通过 envp 传递值时,我们需要用 NULL 终止它吗?
最后,envp 放在堆栈的什么位置?
提前致谢!
在 C 编程语言中,对于 execve:
int execve(const char *filename, char *const argv[],
char *const envp[]);
我们如何使用 envp 进行漏洞利用?
其次,当通过 envp 传递值时,我们需要用 NULL 终止它吗?
最后,envp 放在堆栈的什么位置?
提前致谢!
这个例子可以帮助你理解 execve() argv 和 envp 的用法
$ 猫 a.sh
#!/bin/sh
echo "value of PWDIR is $PWDIR"
echo "first arg = $1"
echo "second arg = $2"
printenv
/* execve.c */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *newargv[] = { NULL, "hello", "world", NULL };
char *newenviron[] = {"PWDIR=/home/root" };
if (argc != 2) {
fprintf(stderr, "Usage: %s <file-to-exec>\n", argv[0]);
exit(EXIT_FAILURE);
}
newargv[0] = argv[1];
execve(argv[1], newargv, newenviron);
perror("execve"); /* execve() only returns on error */
exit(EXIT_FAILURE);
}
编译代码
$ cc execve.c -o execve
执行代码并输出如下
$ ./execve a.sh
value of PWDIR is /home/root
first arg = hello
second arg = world
PWDIR=/home/root
PWD=/home/arul/work/images/samples
在 execve 中传递的环境变量在 shell 脚本中使用。另请注意,执行脚本时,将在此处生成单独的 shell。
Linux 上的 Shellcode 倾向于使用系统调用来执行。您可能在考虑 ret2libc 吗?您的问题是混合 c 代码和 shellcode,不清楚您在问什么。