LEVEL 3
[level3] passcode : can you fly?
(NO DRAG, NO PASSCODE)
역시 hint가 존재한다. hint를 뜯어보자.
C언어로 작성된 코드가 있다. 또한 동시에 여러 명령어를 사용하는 방법과 문자열 형태로 명령어를 전달하는 방법을 알고 있으면 문제를 풀 수 있을 것 같다. 먼저 코드를 살펴보자.
여기서 autodig를 실행할 때 문자열 형태로 인자를 전달하여 주고 만약 autodig에 SetUID가 설정되어있다면 전달받은 문자열 형태의 인자가, 즉 명령어가 root의 권한으로 실행된다.
또한
1. 동시에 여러 명령어를 사용하는 방법은 명령어와 명령어 사k이에 semicolon(;)을 넣어주는 것
2. 문자열 형태로 명령어를 전달하는 방법은 명령어를 "명령어" 형태로 전달하여 주는 것
이 두 가지를 알아두자.
역시나 autodig에만 SetUID가 설정되어있다.
먼저 autodig에 인자를 하나만 넘겨주었을 때, 즉 argc = 1일 때의 경우를 살펴보자.
프로그램을 실행할 때 argv[0]은 프로그램의 이름이기 때문에 항상 argc >= 1 이다. 역시 프로그램을 다른 인자 없이 실행시키면 코드의 조건문과 같이
Auto Digger Version 0.9
Usage : /bin/autodig host
라고 출력되며 프로그램(함수)를 종료한다.
이번에는 argc = 2 가 되도록 문자열 형태로 인자를 전달해보자
코드속의 system 명령어가 cmd에 들어있는 값을 읽으면서 실행시켜줄 것이기 때문에 문자열 형태로 명령어를 전달해주면 그 명령어가 실행될 것이다. 따라서
"/bin/bash;my-pass"
즉 level4의 권한을 가진 상태에서 쉘로 이동한 다음 my-pass 명령어로 level4의 passcode를 얻는 것이다.
먼저 dig 명령어가 실행되고 @뒤에 ip가 아닌 문자열을 전달해주었으므로 dig에 대한 오류 메시지가 뜨고 몇초후에 level4의 passcode가 출력되는 것을 볼 수 있다.
[level4] : suck my brain
'Pwnable > FTZ' 카테고리의 다른 글
FTZ - level5 [Symbolic Link / Race Condition] (0) | 2019.12.23 |
---|---|
FTZ - Level4 [Backdoor] (0) | 2019.12.01 |
FTZ - level2 [Editor] (0) | 2019.11.10 |
FTZ - level1 [SetUID] (0) | 2019.11.10 |
Trainer 6 ~ 10 (0) | 2019.10.09 |