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 |