'php filter'에 해당되는 글 1건
- 2018.01.26 [webhacking.kr] prob25(150pt)
## prob25(web, 150pt)
[Main]
25번 문제는 널 바이트를 이용하는 문제였습니다. 생각보다 많이 어렵진 않았지만 하마터면
엄청 삽질할 뻔했습니다...
우선 문제를 보도록 하겠습니다.
[그림 1] 문제 페이지
문제 페이지를 보면 뭔가 리눅스의 "ls" 명령의 결과 처럼 보이는 파일들 목록이 보이고, 아래에는 "hello world"라는 문자열이 보입니다. 그리고 URL을 봤더니 "~/?file=hello"라고 되어 있습니다.
저는 여기서 뭔가 GET방식의 파라미터 file변수로 받은 값에 ".txt"를 붙여서 파일을 read하고 보여주는 구나~ 라고 생각했습니다. 그런데 read하는 방식은 exec()함수(?) php에서 명령어를 실행하는 함수를 사용하는 줄 알고 "/?file=index.php;"이런식으로 커맨드 인젝션이 될 줄 알고 해보았습니다. 그런데 password.php도 안되고 다 안되서 실패!
두 번째로 생각해낸 방식은 예전에 어디서 LFI문제에서 php의 filter기능을 쓰는 것을 본적이 있는 것 같아서 검색해보았더니 대충 "?var=php://filter/convert.base64-encode/resource=index"이런식으로 사용하는 것이었습니다.(참고 : http://www.php.net/manual/en/filters.php) 이외에도 여러 php의 필터방식을 이용하여 파일을 읽는 방식을 이용해보았지만 실패했습니다.
마지막 세번째로.. 생각해낸 방식은 파일이름 뒤에 ".txt"가 붙여져서 파일을 read하는데 앞에 NULL문자인 %00을 넣으면 어떨까? 라고 생각하고 "/?file=index.php%00"을 넣었더니.. 아무 반응이 없었습니다. 여기서 %00이 아닌지 알고 넘어갔으면 한참동안 삽질할뻔 했으나.. "/?file=password.php%00"을 넣으니 아래 [그림 2]와 같이 파일이 읽혔습니다!
[그림 2] Congratulation!
'Wargame > webhacking.kr' 카테고리의 다른 글
[webhacking.kr] prob1(200pt) (0) | 2018.02.21 |
---|---|
[webhacking.kr] prob46(300pt) (0) | 2018.01.26 |
[webhacking.kr] prob20(200pt) (0) | 2018.01.19 |
[webhacking.kr] prob8(350pt) (0) | 2018.01.18 |
[webhacking.kr] prob21(250pt) (0) | 2018.01.13 |