C在execve中使用环境变量进行利用

时间:2016-01-27 00:52:25

标签: stack environment-variables exploit execv

在C编程语言中,对于execve:

  params = {
    profile_id: profile.id,
    track_id: track.id,
    format: :js
  }

  post :create, params

我们如何使用envp进行开发?

其次,当通过envp传递值时,我们是否需要使用NULL终止它?

最后,envp放在堆栈的哪个位置?

提前致谢!

2 个答案:

答案 0 :(得分:0)

Linux上的Shellcode倾向于使用系统调用来执行。你是否想过ret2libc?你的问题是混合使用c代码和shellcode,而且不清楚你在问什么。

答案 1 :(得分:0)

此示例可帮助您了解execve()argv和envp

的用法

$ cat 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。