About

Check the home directory of flag03 and take note of the files there.

There is a crontab that is called every couple of minutes.

To do this level, log in as the level03 account with the password level03 . Files for this level can be found in /home/flag03.

Source code

There is no source code available for this level


문제의 핵심부터 살펴보자.


crontab에 설정되어 있는 문제 파일을 이용 해 쉘을 획득하라.


문제의 디렉토리로 가보면 쉘 스크립트로 보이는 파일이 하나 존재하며 소스를 보면 다음과 같이 되어 있다.


[그림 1 - 쉘 스크립트]


코드 자체는 단순하다. writable.d  디렉토리의 파일 이름을 가지고 와 일정시간에 주기적으로 bash -x [writable.d의 파일명] 명령을 수행하고 명령을 수행한 파일은 삭제하는 스크립트이다. 그렇다면 우리가 실행해야 할 명령은 writable.d 디렉토리에 파일이름으로 존재해야 한다. 하지만 일반적인 명령어를 파일 이름으로 지어 저장해 둔다고 하여도 level03 쉘에는 영향을 미치지 못한다. writable.sh는 level03 쉘에서 실행되는 것이 아니기 때문이다. 쉘 스크립트를 이용해 우리가 level03 계정에서 실행해 줄 또 하나의 파일을 만들어야 한다. 이 문제는 flag03의 쉘을 획득하는 것이 목표이니 우리가 어떤 파일을 실행했을 때 flag03 계정의 쉘이 띄어지는 프로그램을 만들어 flag03의 권한으로 실행되게끔 해보도록 하자. 일단 flag03의 권한으로 설정 해 쉘을 띄어주는 프로그램의 소스이다.


[그림 2 - flag03의 쉘을 띄어줄 프로그램 코드]


이 파일을 flag03의 권한으로 컴파일하고 flag03의 SUID를 걸어주고 우리가 실행을 시킨다면 우리는 flag03의 쉘을 획득 할 수 있을 것이다. 


[그림 3 - bash 명령 파일 생성]


gcc를 직접 파일명으로 하지 않은 이유는 -o 옵션으로 인해 touch 명령이 실행되지 않기 때문에 생성이 되질 않는다. 또 bash의 -x 옵션으로 인해 명령이 확장되면서 위처럼 할 경우 bash 파일이 실행되면서 gcc 명령도 같이 실행된다.

위 코드를 간단히 설명을 하자면, writable.sh 스크립트가 실행되면서 bash -x bash 명령을 실행하게 된다. bash 파일에는 gcc 명령이 들어있고 컴파일이 완료되면 chmod로 생성된 실행파일에 SUID와 실행권한을 준다. 우리는 생성된 shell 실행 파일을 실행하면 되는 것이다.


[그림 4 - 쉘 획득]



+ Recent posts