문제
풀이
아무 값이나 넣어서 제출하기를 눌렀을 때, 나오는 모습이다.
처음 문제를 보았을 때, 모르는 개념이 많아서 먼저 함수나 php코드 형태를 검색해봤다.
PHP 개념
1. extract($_GET)
: PHP에서는 일반적으로 $_GET[aaa]를 $aaa로 쓸 수 있다. 하지만 서버 설정이나 버전에 따라서 반드시 $_GET[aaa]를 써야 하는 경우가 있다. 이 때 본문에 $_GET[aaa] 대신 $aaa가 쓰여있다면 오작동을 일으키게 된다.
extract함수는 배열의 값을 꺼내주는 역할을 한다. 즉 $_GET[aaa], $_GET[bbb] 가 있다면 $aaa, $bbb로 쓸 수 있도록 만들어준다.
2. trim 함수
: 시작과 끝 문자열에서 공백(또는 문자)을 제거하는 trim 함수
3. file_get_contents 함수
: 전체파일을 문자열로 읽어들이는 PHP 함수, 로컬파일, 원격파일 모두 가능
4. isset 함수
: 선언이 되어있으면 true, 선언이 되어있지 않으면 false
$filename의 값을 'secret.txt'로 선언한 뒤에 extract($_GET);을 이용해 값을 받고 있는 것을 알 수 있다.
문제를 풀기 위해서 $filename의 값을 바꾸고, $filename의 값을 아무 값으로 변경한다면 해당 파일은 존재하지 않을 것이므로 guess에 아무 값도 입력해주지 않는다면 $guess===$secretcode가 true되어 flag가 나올 것이다.
답: http://ctf.j0n9hyun.xyz:2030/?filename=1&guess=
성공적으로 flag 값이 나오는 것을 볼 수 있다.
참고
https://bbolmin.tistory.com/53
'Security > WebHacking' 카테고리의 다른 글
[HackCTF Web] Login (SQL Injection) (426) | 2019.11.28 |
---|---|
[HackCTF Web] Read File (437) | 2019.11.28 |
[HackCTF Web] 보물 (422) | 2019.11.28 |
[HackCTF Web] Button (431) | 2019.11.20 |
[HackCTF Web] Hidden (272) | 2019.11.19 |