NATAS11





현재 기본 데이터의 값은 위와 같다.

 if($data["showpassword"] == "yes") {

    print "The password for natas12 is <censored><br>";
}

data["showpassword"]의 값이 yes이면 패스워드가 출력될 것이다.

 function saveData($d) {

    setcookie("data", base64_encode(xor_encrypt(json_encode($d))));
}

쿠키는 위의 함수에 의해 생성된다.

 function xor_encrypt($in) {

    $key = '<censored>';
    $text = $in;
    $outText = '';

    // Iterate through each character
    for($i=0;$i<strlen($text);$i++) {
    $outText .= $text[$i] ^ $key[$i % strlen($key)];
    }

    return $outText;
}

XOR 암호화 함수는 위와 같이 정의되어 있다..

data["showpassword"]의 값을 yes로 주기 위해서 먼저 key의 값을 알아내야 한다.

 

setcookie("data", base64_encode(xor_encrypt(json_encode($d))));

쿠키 생성을 위한 함수의 실행 순서는 다음과 같다.

json_encode() -> xor_encrypt() -> base64_encode()

=> base64_decode()의 반환 값과 key를 XOR 연산하면 json_encode()의 반환 값이 나올 것이다.

 

★ XOR 연산(^)의 특징

A^B=C

A^C=B

-> 이 특징을 통해서

base64_decode()의 반환 값과 json_encode()의 반환 값을 XOR 연산하면 key 값이 나온다는 것을 알 수 있다.

 

개발자 도구에서 setcookie()에 의해 생성된 쿠키의 값을 확인하고 key를 구하기 위한 PHP 코드를 작성했다.


코드 //(키 값 구하는 코드) 

<?php

$defaultdata = json_encode(array( "showpassword"=>"no", "bgcolor"=>"#ffffff"));

$cookie = base64_decode("ClVLIh4ASCsCBE8lAxMacFMZV2hdVVotEhhUJQNVAmhSEV4sFxFeaAw=");


function xor_encrypt($in, $cookie) {

    $key = $cookie;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }


    return $outText;

}


print xor_encrypt($defaultdata, $cookie);


?>


쿠키값 구하는 코드 

   <?php

$defaultdata = json_encode(array( "showpassword"=>"yes", "bgcolor"=>"#ffffff"));


function xor_encrypt($in) {

    $key = qw8J;

    $text = $in;

    $outText = '';


    for($i=0;$i<strlen($text);$i++) {

        $outText .= $text[$i] ^ $key[$i % strlen($key)];

    }

    return $outText;

}

print base64_encode(xor_encrypt($defaultdata));

?>



+ Recent posts