본문 바로가기

포너블

[포너블/pwnable.kr] cmd1

cmd1@pwnable:~$ ls
cmd1 cmd1.c 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;
}
  1. 환경변수 PATH를 /thankyouverymuch로 설정
  2. filter 함수 호출
  3. argv[1]에 flag, sh, tmp 라는 단어가 있으면 실행 종료
  4. system 함수에 argv[1]를 인자로 넘겨 주며 호출

system

입력받은 command의 문자열을 실제로 실행 시킴

즉, flag를 여는 명령어 argv[1]로 넣어 주면 됨!


PATH

우리가 평소 명령어를 쓸 때 cat, ls와 같이 썼던 이유는 PATH에 이미 /bin이 명시되어 있었기 때문이다.

하지만 지금은 PATH가 이상한 경로(/thankyouverymuch)로 명시되어 있으므로 명령어를 써 주기 위해서는 /bin을 써 줄 필요가 있다.

따라서 /bin/cat flag 명령어를 넣어 주면 된다. 하지만 filter 함수에서 flag가 걸러지므로 이는 와일드 카드로 해결한다.


와일드 카드

파일 혹은 디렉토리의 이름을 패턴의 형식으로 출력하게 만들어 준다.

* : 일치되는 모든 문자열을 찾음

? : 일치되는 모든 문자를 찾음

[ ] : [ ] 안에 있는 문자열의 패턴에 일치하는 것을 찾음

 

와일드 카드를 통해 flag 라는 단어 없이 flag 파일에 접근할 수 있다.


bin

bin 파일에는 우리가 쓰는 모든 명령어들이 들어 있다.

'포너블' 카테고리의 다른 글

[포너블/pwnable.kr] blukat  (0) 2023.08.30
[포너블/pwnable.kr] cmd2  (0) 2023.08.30
[포너블/pwnable.kr] passcode  (0) 2023.08.30
[포너블/pwnable.kr] blackjack  (0) 2023.08.30
[pwnable.kr/포너블] random  (0) 2023.08.24