FTZ level 2 ~ 5

배재현·2025년 5월 29일

정보 보안

목록 보기
9/12

level2


힌트를 봐서는 VIM에서 :sh 명령어로 쉘로 진입할 수 있다는 것을 말하는 것 같다.

level1과 똑같은 방식으로 level3 setuid 권한이 있는 파일을 찾아보았다.

find / -user level3 -perm -4000 2>/dev/null

여기서 2>/dev/null은 명령어 실행중 발생한 에러를 /dev/null로 전송해라는 의미다. /dev/null에 전송된 모든 데이터는 버려지므로 결국 에러를 출력하지 말라는 것과 똑같다.

/usr/bin/editor 라는 파일을 찾아서 실행시켰더니 VIM 에디터가 나왔다.
:sh을 입력하니 level3 권한으로 나왔고, my-pass를 실행시킬 수 있었다.

level3

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

명령어를 실행해본 결과 /bin/autodig이 level4 setuid 권한을 가지고있다.
하지만 autodig 은 dig이라는 실행하는데

동시에 여러 명령어를 사용하려면?

세미콜론 ; 을 사용하면 한줄에 여러 명령어를 실행시킬 수 있다.

문자열 형태로 명령어를 전달하려면?

autodig ;my-pass를 입력해도 autodig 이후 my-pass는 level3 권한으로 실행된다. 따라서 프로그램에 my-pass까지 인자로 넣기위해서는 큰따옴표 ""로 감싸줘야한다.

autodig ";my-pass"

level4

이제는 find로 찾아도 level5 setuid 권한이 있는 파일이 없다.

힌트를 보면 누군가 /etc/xinetd.d에 백도어를 심어놓았다고한다.
해당 경로로 이동하면 실제로 backdoor라는 파일이 있다.


백도어 파일의 내용을 해석하면 finger라는 서비스가 실행될 때, level5 유저의 권한으로, /home/level4/tmp/backdoor 라는 파일을 실행하겠다 라는 뜻이다.

하지만 tmp에 backdoor라는 파일이 없으므로 직접 만들어줘야한다. C언어로 코드를 작성한 다음 컴파일해도 되고, 쉘 스크립트를 작성해도 된다.

gcc -o backdoor backdoor.c

이렇게 실행파일을 만든 후 telnet localhost 79로 finger 서비스를 호출하면 level5권한으로 my-pass가 실행된다.

level5


usr/bin/level5를 실행하고 /tmp로 이동했다. (home/level5/tmp가 아니라 루트의 /tmp다.)

하지만 /tmp로 이동해도 level5.tmp라는 파일은 생성되지 않았다. 프로그램 실행 종료와 동시에 파일이 사라지는 것 같다. level5의 심볼릭 링크를 생성하거나, level5.tmp라는 똑같은 이름의 파일을 만들어서 프로그램이 해당 파일을 덮어씌우도록 할 수 있다.

나는 level5.tmp라는 파일을 미리 만들고 프로그램을 실행시켰다. 이후 cat level5.tmp를 하면 비밀번호를 볼 수 있다.

profile
많관부

0개의 댓글