Information Security

[OverTheWire] NATAS11 본문

Web Hacking/NATAS 풀이

[OverTheWire] NATAS11

leeeeye321 2018. 1. 8. 02:18

[OverTheWire] NATAS11

 

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

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

 

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 코드를 실행해보니 qw8J라는 key 값이 반복 출력되었다.

 

key를 이용해서 data["showpassword"]의 값을 yes로 했을 때 생성되는 쿠키의 값을 알아냈다.

 

 

Burp Suite를 통해 쿠키 값을 변조했다.

 

패스워드를 획득하여 NATAS 11 Clear!

'Web Hacking > NATAS 풀이' 카테고리의 다른 글

[OverTheWire] NATAS13  (0) 2018.01.09
[OverTheWire] NATAS12  (0) 2018.01.09
[OverTheWire] NATAS10  (0) 2018.01.05
[OverTheWire] NATAS9  (0) 2018.01.05
[OverTheWire] NATAS8  (0) 2018.01.01