Level 10 → Level 11
Web/Natas

Level 10 → Level 11

반응형


바로 View sourcecode를 통해 바로 소스를 확인해보도록 합시다.

 

<?

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

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;
}

function loadData($def) {
    global $_COOKIE;
    $mydata = $def;
    if(array_key_exists("data", $_COOKIE)) {
    $tempdata = json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);
    if(is_array($tempdata) && array_key_exists("showpassword", $tempdata) && array_key_exists("bgcolor", $tempdata)) {
        if (preg_match('/^#(?:[a-f\d]{6})$/i', $tempdata['bgcolor'])) {
        $mydata['showpassword'] = $tempdata['showpassword'];
        $mydata['bgcolor'] = $tempdata['bgcolor'];
        }
    }
    }
    return $mydata;
}

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

$data = loadData($defaultdata);

if(array_key_exists("bgcolor",$_REQUEST)) {
    if (preg_match('/^#(?:[a-f\d]{6})$/i', $_REQUEST['bgcolor'])) {
        $data['bgcolor'] = $_REQUEST['bgcolor'];
    }
}

saveData($data);



?>

<h1>natas11</h1>
<div id="content">
<body style="background: <?=$data['bgcolor']?>;">
Cookies are protected with XOR encryption<br/><br/>

<?
if($data["showpassword"] == "yes") {
    print "The password for natas12 is <censored><br>";
}

?>

자세히 살펴보게 되면 우리가 볼 수 있는 데이터가 어떤 과정을 통해 생성된 부분은

base64_encode(xor_encrypt(json_encode($d)))

이 부분입니다. 그리고 암호화된 부분은

json_decode(xor_encrypt(base64_decode($_COOKIE["data"])), true);

이 부분입니다.

 

즉 cookie에서 얻을 수 있는 값을 base64로 인.디코딩한 값을 C라고 해봅시다.

그리고 xor 암호화 키를 A, json 인.디코딩하는 부분을 B라고 합시다.

그렇다면 xor 연산의 특성상 A ^ B = C 의 결과는 B ^ C = A 와 같습니다.

즉, 키 값을 알 수 있는 것이죠.

 

이렇게 해서 원래 키값을 얻을 수 있습니다.

 

이제 해야할 일은 키를 이용해서 원래 했던 대로 showpassword의 값을 "yes"로 바꾼 값을 다시 계산해준 다음에 cookie 값을 바꾸어주는 것뿐입니다.

넣어줄 cookie값: ClVLIh4ASCsCBE8lAxMacFMOXTlTWxooFhRXJh4FGnBTVF4sFxFeLFMK

그러고 나서 페이지를 새로고침 해주면...

 

PASS!

 

EDXp0pS26wLKHZy1rDBPUZk0RKfLGIR3

반응형