2016-01-27 3 views
0

В языке программирования C, для execve:C Exploit с помощью переменной окружения в execve

int execve(const char *filename, char *const argv[], 
        char *const envp[]); 

Как мы можем использовать envp для использования?

Во-вторых, передавая значения через envp, нужно ли это завершать его с помощью NULL?

Наконец, где envp размещен на стеке?

Заранее благодарен!

+0

Какой вид вы имели в виду? Любой подвиг? Недостаток безопасности? – Paulo

+0

Я хочу открыть/bin/sh с помощью шеллкода. Предположим, что я знаю местоположение адреса возврата в стеке, и у меня есть код оболочки, и я должен использовать envp для его использования. –

+0

Есть ли еще одна вещь, которую вы хотите задать по этому вопросу? –

ответ

0

Шеллкод в Linux, как правило, использует системные вызовы для exec. Возможно, вы думаете о ret2libc? Ваш вопрос заключается в смешении кода c и шеллкода, и неясно, что вы просите.

0

Этот пример может помочь вам понять, использование 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 используются в сценарии оболочки. Также обратите внимание, что при выполнении скрипта здесь будет создана отдельная оболочка.