systemhacking/background

execve, execl

qkqhxla1 2015. 3. 9. 15:34

http://bbolmin.tistory.com/35

http://forum.falinux.com/zbxe/index.php?document_srl=408554&mid=C_LIB 참고

system함수는 쓰기가 간편했다. 단지 system("/bin/sh"); 한줄만 넣으면 알아서 쉘이 실행되는데,

execve, execl등은 뭘 어떻게 해야되지..? 하다가 알게됬다.


execve는 인자가 3개 들어가며 인자(아래의 *argv[])의 첫번째는 실행시킬 파일명, 중간에는 인자, 마지막에는 반드시 NULL이 들어가야 한다. 아래처럼 실행시키면 된다.

#include <stdio.h>
#include <unistd.h>

int main()
{
        char *argv[]={"/bin/sh",NULL};
        setreuid(geteuid(),geteuid());
        execve("/bin/sh",argv,NULL);
        return 0;
}


execl은 인자가 최소 3개 들어간다. 첫번째 인자는 실행시킬 파일, 두번째 ~마지막-1번째까지는 인자인데, 두번째 인자로 집어넣을 인자가 없다고 해도 첫번째 실행 파일을 한번 더 써줘야 한다. 마지막엔 NULL이 들어간다.

#include <stdio.h>
#include <unistd.h>

int main()
{
        execl("/bin/sh","/bin/sh",NULL);
        return 0;
}