보안 공부하는 꼬깔이

Webhacking.kr 25번 문제 풀이

 

25번 문제 메인화면이다.

리눅스에서 ls -l 명령어를 수행 했을때 나오는 결과값과 비슷한 내용이 존재한다.

그리고 url을 확인하면 GET 방식으로 file 변수에 밑에 존재하는 파일들의 이름을 입력하면 출력되는 형식인 것 같다.

디폴트 값으로는 hello 값이 get 방식으로 전달된다. 그리고 참고할 사항으로는 file 변수에 hello 만 전달했는데 hello.txt가 출력되었다. 그렇다는 것은 $file."txt" 이런식으로 php 파일을 실행할 수 없게끔 확장자를 고정시켜 놓은 모양이다.

그리고 password, index 외에 임의의 아무 값이나 입력해도 hello.txt 의 내용이 출력된다.

$file=$GET_['file']."txt"

if(file==hello.txt)

{

해당파일 open 후 출력

}

else if(file==index.php

{

해당파일 open 후 출력

}

esle if(file==password.php)

{

해당파일 open 후 출력

}

esle

{

hello.txt 내용 출력

}

아마 이런식으로 소스코드가 작성되어 있어서 password.php, index.php 를 입력해도 뒤에 ".txt" 확장자가 강제로 붙어 조건에 부합하지 않기 때문에 else 문으로 따져 hello.txt 파일의 내용이 출력되는 것이 아닌가 추측된다.

그렇다면 마지막에 붙은 확장자를 우회하기 위해 문자열을 강제로 끝마치는 %00(null 바이트) 를 파일 이름 뒤에 붙여 넘겨주게 되면 ".txt" 구문은 무시하게 되고 우리가 원하는 파일을 출력시킬수 있을 것이다.

실제로 ".txt" 확장자가 %00(null바이트) 로 인해 무시하고 password.php 파일이 출력되었다.

출력된 password를 auth 에 입력하면 문제 공략 성공!

150 Point Get :D

 

 

 

'Web Hacking > Web Hacking.kr' 카테고리의 다른 글

Webhacking.kr 26번 문제 풀이  (0) 2017.07.12
Webhacking.kr 24번 문제 풀이  (0) 2017.07.10
Webhacking.kr 23번 문제 풀이  (0) 2017.07.10
Webhacking.kr 21번 문제 풀이  (2) 2017.07.10
Webhacking.kr 20번 문제 풀이  (0) 2017.07.07