웹/HackCTF

CTF_WEEK2_HackCTF # 5 guess me

묘나 2021. 2. 5. 00:31
728x90
반응형
SMALL

 

대충 요런 문제다.

먼저 아무거나 써서 한번 제출해봤다.

 

요런 식으로 나온다..

(처음에 막연할 때에는 이렇게 아무거나 쳐보고 그 결과를 관찰해 보는 것도 좋은 방법 중 하나이다.)

 

일단 이 코드들을 분석해보쟈.

<?php를 보니 php코드이당.

코드는 뭐 별로 복잡해 보이지는 않는다!

이중 조건문....그냥 저 조건문 두개만 잘 분석하면 끝날 것 같다!

 

일단 *get 메소드로 입력한 변수값을 받는다.

 

1 - 먼저, 첫번째 조건문 분석

 

if (isset($guess)) {

        $secretcode = trim(file_get_contents($filename));

$filename 파일을 문자열로 읽어들인 후, 공백 및 문자열을 제거하여 $secretcode 여기에 저장한다는 것 같다.

첫번째 조건문에 대한 분석은 대충 끝났고….

 

 

*~잠깐 함수 공부~*

 

<extract 함수>

: 일자정보에서 년도, , 일과 같은 특정 내용을 추출하여 반환한다.

반환값은 적절한 time zone명 또는 생략형을 포함한 문자열이다.

 

또한, 이 함수는 취약점을 가지고 있다

(이 문제의 뽀인트)

이 함수 이전 변수 값을 변경할 수 있다.

-> 만약 공격자가 변수명을 알고 있다면, 이 변수에 다른 값을 덮어씌울 수 있다.

 

<isset 함수>

: 변수가 설정되었는지 확인하는 함수

 

<trim 함수>

: 공백 및 문자열을 제거하는 함수

 

<file_get_contents 함수>

: 전체 파일을 문자열로 읽어들이는 함수

 

 

2 - 두번째 조건문으로 가보쟈.

 

위의 조건문 안에 또다른 조건문이 이렇게 있다.

if ($guess === $secretcode) {

          $flag = file_get_contents('flag.txt');

          echo "<p>flag is"." $flag</p>";

위의 조건문과 이 조건문까지 모두 만족을 해야 플래그값을 얻을 수 있을 것으로 보인다.

 

일단 두번째 조건문에서 $guess === $secretcode 이 조건이 성립해야 한다.

그래야 플래그값을 출력해줄 것 이다.

$secretcode 이 값은 우리가 조작할 수 있다.

이 값은 $filename 으로부터 만들어지는 것이므로 $filename 이곳에 우리가 원하는 값을 넣어 제어할 수 있을 것 같다.

그리고 $guess  변수도 제어할 수 있다.

위에서 얘기했듯이, extract 함수에는 취약점이 있으므로 이를 이용해 이 조작을 진행할 수 있을 거다.

 

$filename'secret.txt' 파일로부터 읽어와 변수 $secretcode 에 넣는다.

그러니까 우리는 'secret.txt' 파일에 없는 아무 값이나 $filename 에 넣어주면 된다.

그러면 $secretcode 에는 당연히 아무값도 들어가지 않게 된다.

그리고 우리가 조작할 수 있는 또다른 변수 $guess  에 아무값도 넣지 않게 되면, 두번째 조건문을 만족하게 된다.

그리고 플래그값을 출력해 줄 것이다.

 

성공쓰

728x90
LIST