문제

Mommy! what is PATH environment in Linux?

ssh cmd1@pwnable.kr -p2222 (pw:guest)


분석

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의 값을 모두 없애버린다.

그리고 system(argv[1])를 실행시켜주는데

argv[1]에는 "flag", "sh", "tmp"의 문자열이 포함될 수 없다.


FL4G

argv[1]으로는 "/bin/cat flag"가 적당할 것 같다.

하지만 argv[1]이 flag는 포함할 수 없으니 tmp 폴더로 가서 'fake' 파일을 만들고 symbolic link를 걸어주면 될 것 같다!

+) 실제 pwnable.kr 서버에서는 다음과 같이 수행하면 된다.

1. /tmp 폴더에서 "~/flag"로 연결되는 'fake'파일 생성

2. 명령어 : ~/cmd1 "/bin/cat fake" 실행


'pwnable.kr' 카테고리의 다른 글

[Toddler's Bottle] memcpy writeup  (0) 2018.09.17
[Toddler's Bottle] cmd2 writeup  (0) 2018.09.16
[Toddler's Bottle] cmd1 writeup  (0) 2018.09.16
[Toddler's Bottle] lotto writeup  (0) 2018.09.16
[Toddler's Bottle] blackjack writeup  (0) 2018.09.16
[Toddler's Bottle] coin1 writeup  (0) 2018.09.16

+ Recent posts