반응형

HackCTF 문제 풀이 / Web - Guess me (100)

https://ctf.j0n9hyun.xyz/challenges#Guess%20me

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

Guess me 100 문제를 풀어보도록 하겠습니다. 

우선 아래 링크에 접속하겠습니다.

http://ctf.j0n9hyun.xyz:2030/

접속을 해보면 아래와 같이 php 코드가 있고, 코드를 입력하는 부분과 제출 버튼이 있습니다. 

secret.txt를 입력하면 비밀코드가 아니라고 출력됩니다. 

그리고 url의 guess 전달인자에는 아래 텍스트 박스에 입력한 문자열이 입력됩니다. 

우선 코드를 한번 분석해 보겠습니다. 

$_Get 으로 입력된 값을 추출하고, if문에서 isset($guess) 함수를 호출하였는데, 이는 $guess로 설정된 변수가 있는지 확인합니다.
trim은 문자열 양 옆의 공백을 지우는 역할을 합니다. 
file_get_contents()는 전달인자로부터 텍스트를 읽습니다. 

그 다음에는 guess와 secretcode 값이 같도록 설정하면 flag를 출력하는 곳으로 분기됩니다. 

우선 guess 변수는 get으로 전달하는 값을 적절히 하면 if 문 아래로 갈 수 있을 듯 합니다. 
secretcode 변수가 문제인데 이는 filename 변수로부터 값을 읽어들이고, filename 변수는 secret.txt으로 저장되어 있습니다.

문제의 해결은 filename 변수값에 아무 값이나 대입하는 것입니다. 
이것이 가능한 이유는 extract() 메서드가 filename 변수를 선언한 뒤에 나타나기 때문입니다.

filename에 해당하는 파일을 찾고, 그 파일의 콘텐츠를 확인하는데 서버 내 파일이 없기에 Null 값을 리턴하는데, 
guess도 Null 값이 들어가면 됩니다. 

따라서 filename=아무문자&guess= 와 같이 주소창에 대입하면 원하는 flag를 찾을 수 있게 됩니다. 

반응형

+ Recent posts