ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <XCZ.KR> 18번 문제
    Wargame/XCZ.KR 2021. 11. 2. 17:22

     

    18번 문제

    Title이 Web Basic인걸로 보아 웹 해킹 문제인듯 하다.

    우선 View source를 통해 페이지 소스를 먼저 살펴보겠다.

    굉장히 보기 힘든 변수들로 이루어진 PHP문이 있다. 우선 읽기 힘든 변수들 먼저 바꿔보겠다.

    <?
    $key = "Congratulations!</br>Key is ??????????????????";
    $A = @$_COOKIE['c'];
    $B = @$_GET['g'];
    $C = @$_POST['p'];
    if(empty($A) || empty($B) || empty($C)){exit ('wrong T.T');}
    $D = $B . $A;
    $E = $C;
    
    function test($a){
    $b = '';
        for($i=0; $i < strlen($a); $i++){
            $b = $b . ' - ' . ord(substr($a,$i,1));  // substr(문자열, 시작위치, 길이)
        }
        return $b;
    }
    if(test($D)==" - 103 - 105 - 118 - 101 - 109 - 101 - 112 - 97 - 115 - 115 - 119 - 111 - 114 - 100" || test($E) == " - 107 - 101 - 121 - 112 - 108 - 122 - 33"){
        echo $key;
    }
    else{
        echo 'wrong T.T';
    }
    ?>

    쿠키로 받은 값을 $A, GET 방식으로 받은 값을 $B, POST 방식으로 받은 값을 $C라 한다. 그리고 $A, $B, $C중 하나라도 비어있다면 'wrong T.T'를 출력한다.

    $D는 $B와 $A를 이어붙였고, $E는 $C이다.

     

    그리고 test함수가 나와있다. $b는 빈문자열로 시작하고 파라미터로 받은 $a의 길이만큼 반복한다. 한번 반복할때 마다 $b에 '-'와 문자($a의 문자를 아스키코드로 변환한 것)를 이어붙인다. 아래엔 $D와 $E를 test함수에 인수로 준 결과가 주어져있다. 우선, 결과의 숫자들을 아스키코드로 변환시켜본다.

    아스키 코드표를 보고 변환시키면 $D는 'givemepassword', $E는 'keyplz!'가 나와야 한다.

    즉, $B와 $A는 'givemepassword'를 마음대로 나누면 되고, $C는 'keyplz!'가 되어야 한다.

     

    먼저 GET 방식으로 $B를 먼저 보낸다.

    GET 방식은 데이터를 URL뒤에 붙여보내면 된다.

    '?'로 URL의 끝을 알리고, 데이터 표현의 시작점을 알린다. @$_GET['g']이므로 'g=giveme'로 $B를 보낸다.

     

    다음으로 COOKIE를 보낸다.

    우선, 현재 쿠키를 알아본다. 주소 창에 'javascript:alert(document.cookie);'를 치면

    현재 페이지의 쿠키값이 뜨게된다. 쿠키로 보낸 'c'의 값이 'password'가 되야하므로

    다시 주소 창에 'javascript:document.cookie='c=password';alert(document.cookie);을 치면

    쿠키에 'c=password'라는 값이 추가된 것을 확인할 수 있다.

     

    마지막으로, POST로 보내기다.

    POST는 GET 방식과 달리 겉에 드러나지 않는다.

    POST 방식은 URL 쿼리로 넘겨줄 수 없기 때문에 따로 POST 방식의 폼을 넣어주어야 한다.

    개발자 도구(F12)의 Elements의 Body내에 마우스 오른쪽 버튼의 'Edit as HTML'을 통해 POST 방식의 폼을 넣는다.

    POST 폼을 만들면 입력 창이 하나 생긴다.

    여기에 $C가 되어야 하는 문자열인 'keyplz!'를 쓰고 Submit 버튼을 누르면

    $A, $B, $C가 서버로 모두 전해졌고, PHP 구문을 통해 인증 키 값을 획득할 수 있게 된다.

    'Wargame > XCZ.KR' 카테고리의 다른 글

    <XCZ.KR> 32번 문제  (0) 2021.11.07
    <XCZ.KR> 21번 문제  (0) 2021.11.03
Designed by Tistory.