flag03 안에는 디렉토리 하나와 스크립트 하나가 들어있습니다.
스크립트 내용은 writable.d 폴더 안에 있는 모든 프로그램을 실행시킨 뒤 삭제하는 기능인 듯 합니다.
처음엔 writable.d 안에 쉘을 실행시키는 프로그램을 넣고 이 스크립트를 실행시켜야 하는 문제인 줄 알았습니다. 하지만 권한때문에 실행이 되지 않더군요. writable.d 안의 파일들이 자꾸 사라져서 어느정도 눈치는 챘습니다만 write-up을 보고나서야 이 스크립트가 일정 시간을 주기로 자동으로 동작하는 것이라는걸 알았습니다.
exploit-exercise 홈페이지가 닫혀서 그런지 제가 받은 iso 파일이 이상한건지 이런 힌트 부분이나 다른 라이트업에서 올려놓고 분석하는 코드같은 것들이 전혀 없어서 좀 당황스럽네요.
우선 그렇다면 스크립트는 flag03의 권한으로 자동으로 실행될 테니 쉘을 띄우는 프로그램을 .d 안에 넣고 기다리기만 하면 되겠네요.
이렇게 간단하게 생각했지만 여기서도 지식의 부족으로 한참 헤메고 말았습니다.
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
The -x
option starts a BASH shell in debug mode. You can see all the details of how your command/script is processed. It's a good way to find some bugs if your script does not do what you would expect to
And just as Alex said in the comment above. To run a command in BASH, you have to use -c
option like bash -x -c ls
.// 출처: http://stackoverflow.com/questions/10107124/bash-x-command
In UNIX environments, ulimit -t is used to set the maxiumum CPU time that can be used by a process. If that time limit is exceeded, the operating system sends the SIGXCPU signal to the process, which then ends.// 출처: http://support.sas.com/kb/43/126.html
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
위에 스크립트에서 사용된 ulimit -t, bash -x 두가지 옵션에 대한 설명입니다.
bash에 -x 옵션이 들어가면 디버그 모드로 실행한다는 뜻이랍니다 이 옵션으로는 바이너리 파일을 실행시킬 수 없으며 스크립트는 실행이 가능하다는 사실을 확인했습니다. 바이너리를 실행시키려고 하면 cannot execute binary file이라는 오류메시지가 나오며 위 설명에서처럼 -c 옵션을 추가하면 실행시킬 수 있지만 저 스크립트에 -c를 넣기는 힘들어 보입니다.
또한 단지 /bin/sh를 띄우는 스크립트 역시 의미가 없습니다. ulimit -t 5 가 걸려있기 때문에 9.3인지 2인지 곱하기 5 밀리세컨드?? 아무튼 매우 짧은 시간동안만 쉘이 열리게 됩니다.
그래서 매우 짧은 시간동안 얻는 권한을 이용하기 위해 쉘 프로그램을 컴파일하고 권한을 변경시키는 스크립트를 사용하도록 하겠습니다. 권한은 금방 사라지지만 컴파일된 아웃풋을 다른 폴더에 저장한다면 권한을 가진 프로그램이 남아있을 겁니다.
스크립트를 통해 컴파일할 쉘 실행 프로그램입니다. 996은 cat /etc/passwd 에서 읽은 flag03의 id입니다. 5라는 타임리미트 안에 이것을 컴파일하고 실행할 수 있도록 권한을 변경해 주어야 합니다.
스크립트는 python -c 'print "gcc -o /home/flag03/shell /tmp/level03.c; chmod 7777 /home/flag03/shell;"' > /home/flag03/writable.d/loader; chmod 7777 /home/flag03/writable.d/loader; 이렇게 짰습니다. 길어서 복잡해 보이긴 하지만 별거 없습니다. > 기준으로 왼쪽은 스크립트의 내용 즉 쉘을 실행시킬 프로그램을 컴파일/권한변경 하는 스크립트 > 이후는 그것을 실행가능한 스크립트의 형태로 loader라는 이름으로 내보내고 권한을 변경시켜 주는 내용입니다. 권한은 귀찮아서 모두 7777로 해버렸습니다.
이제 생성된 shell 프로그램을 실행시켜 보겠습니다.
성공입니다.
-끝