미역줄기의 이모저모

pwnable.kr cmd1 풀이 본문

Hacking/포너블.kr 문제풀이

pwnable.kr cmd1 풀이

미역줄기줄기 2024. 2. 2. 00:20
728x90

1. 문제확인

 

리눅스에서 PATH environment가 뭐냐고?

 

일단 접속

 

 

 

 

 

2. 문제 분석

cmd1@pwnable:~$ ls -l
total 20
-r-xr-sr-x 1 root cmd1_pwn 8513 Jul 14  2015 cmd1
-rw-r--r-- 1 root root  	320 Mar 23  2018 cmd1.c
-r--r----- 1 root cmd1_pwn   48 Jul 14  2015 flag

 

cmd1은 실행할 수 있고.. 또 cmd1_pwn이니까 cmd1을 통해서 flag를 구할 수 있겠다!

 

 

 

cmd1.c 코드를 살펴보면,

#include <stdio.h>
#include <string.h>

int filter(char* cmd){
    int r=0;
    r += strstr(cmd, "flag")!=0;
    r += strstr(cmd, "sh")!=0;
    r += strstr(cmd, "tmp")!=0;
    return r;
}
int main(int argc, char* argv[], char** envp){
    putenv("PATH=/thankyouverymuch");
    if(filter(argv[1])) return 0;
    system( argv[1] );
    return 0;
}

filter와 main 각각 나눠서 보자

 

 

filter

int filter(char* cmd){
    int r=0;
    r += strstr(cmd, "flag")!=0;
    r += strstr(cmd, "sh")!=0;
    r += strstr(cmd, "tmp")!=0;
    return r;
}

 

main에서 받아온 cmd에 flag 있으면 0이 아닌 수를 반환, sh, tmp도 마찬가지 -> 0 반환되면 실패임

 

 

 

 

 

main

int main(int argc, char* argv[], char** envp){
    putenv("PATH=/thankyouverymuch");
    if(filter(argv[1])) return 0;
    system( argv[1] );
    return 0;
}

 

PATH를 /thankyouverymuch로 설정했다. 그리고 filter함수를 호출,

filter가 0이 아닌 값을 출력하면 0을 반환하고 -> 실패

아니면 system( argv[1] )를 하고 ->성공!

0을 반환. 

 

여기서 putenv("PATH=/thankyouverymuch");

가 실행되면 어떻게 되는건가?

 

우선 왜 환경변수를 이용한걸까?

 

환경변수는 일종의 즐겨찾기이다.

가장 많이 쓰는 리눅스 명령어인 cat, ls, 등등은 모두 bin이라는 폴더 안에있는 명령이다!!!

그러면 원래는 /bin/cat, /bin/ls의 방식으로 실행시켜야 하지만, cat이나 ls로 실행시켜도 실행이 된다

이는 PATH에 이미 /bin이라고 명시되어있기 때문이다!

 

결국 우리가 하고싶은 일은 main함수 안에서 system(cat flag); 를 하는 것이다!! 

지금 상황은 PATH가 /thankyouverymuch로 설정되어있기 때문에 argv[1]에 cat flag를 넣어도

/thankyouverymuch/cat flag가 된다.., 그전에 filter함수에서 걸림. (flag때문에)

 

 

 

3. 문제풀이

그럼 PATH를  /thankyouverymuch로 바꿨으니까.. 그냥 절대경로를 생략하지 않고 cat를 쓰면 되겠다!

그리고 *라는 필터링을 이용한다!

*은 와일드카드라는 뜻으로, fl* 로 입력하면 'fl로 시작하는 모든 파일에 접근해줘'는 뜻이 됩니다.

 

flag: mommy now I get what PATH environment is for :)

'Hacking > 포너블.kr 문제풀이' 카테고리의 다른 글

pwnable.kr passcode 풀이  (0) 2024.02.02
pwnable.kr lotto 풀이  (0) 2024.02.01
pwnable.kr blackjack 풀이  (0) 2024.02.01
pwnable.kr shellshock 풀이  (0) 2024.02.01
pwnable.kr mistake 풀이  (0) 2024.02.01