Guess me :: HackCTF/Web
문제 화면을 열면 php 코드가 들어있는 것을 확인할 수 있다.
모르는 함수가 있어서 찾아보았다.
- trim() : 문자열 맨 앞과 맨 뒤의 공백을 제거한다.
- file_get_contents()
ex. <?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
-> 웹사이트에 있는 전체 파일을 문자열로 읽어들이는 php 함수
- isset() : 들어있는 값이 NULL이 아님을 의미 (변수가 설정되었는지 확인)
코드를 해석해보면,
1. guess 변수에 값이 있으면 filename 변수에서 파일 문자열을 읽어들인 것을 $secretcode 변수에 넣는다.
2. $guess와 $secretcode 값이 같으면 flag.txt를 출력해준다.
filename 변수와 guess 변수의 내용을 조작해서 문제를 해결할 수 있다.
어떻게 값을 전달해줄까 하다가, 입력 폼에 아무 값이나 넣어보았다.
GET 방식으로 입력된 값이 $guess에 들어가는 것을 확인할 수 있다.
(코드 3번째 줄에서도 확인 가능)
GET 방식을 이용해 URL에 $filename과 $guess의 내용을 조작하면 된다.
그렇다면 $filename과 $guess에 들어가야 할 값은 무엇일까?
두 변수값에 모두 NULL을 넣게 된다면,
$guess 도 false, $filename도 false가 되어 if문이 true가 될 것이다.
flag를 획득했다.