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; }
'systemhacking > background' 카테고리의 다른 글
aslr, dep, ascii_armor (0) | 2015.02.15 |
---|---|
/proc/<pid>/maps 메모리 권한, 로드중인 라이브러리 확인 (0) | 2015.02.11 |
mprotect (메모리 권한 변경) (0) | 2015.02.10 |
linux background 2 (binary hacks) (0) | 2015.02.08 |
linux background 1 (binary hacks) (0) | 2015.02.06 |