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;
}
- 환경변수 PATH를 /thankyouverymuch로 설정
- filter 함수 호출
- argv[1]에 flag, sh, tmp 라는 단어가 있으면 실행 종료
- 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 |