2018. 1. 26. 07:01

## 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
Posted by holinder4S