[ Natas 8 -> Natas 9 bin2hex(), base64_encode() ]

2017. 9. 23. 18:40WebHacking/[OverTheWire]Natas







1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?
 
$encodedSecret = "3d3d516343746d4d6d6c315669563362";
 
function encodeSecret($secret) {
    return bin2hex(strrev(base64_encode($secret)));
}
 
if(array_key_exists("submit"$_POST)) {    // 제출버튼을 클릭함
    if(encodeSecret($_POST['secret']) == $encodedSecret) {        // encodeSecret함수에 입력한값을 인자로 대입
    print "Access granted. The password for natas9 is <censored>";
    } else {
    print "Wrong secret";
    }
}
?>
cs


strrev("문자열") : 문자열을 역순으로 뒤집는다 


bin2hex(str) : 이진수를 16진 표현을 갖는 아스키 문자열로 반환한다

hex2bin(str) : 16진 표현을 갖는 아스키 문자열을 이진수로 반환


base64_encode( data ) : data를 base64로 인코딩한다

base64_decode( data ) : 인코딩된 data를 base64로 디코딩


# base64_encode()함수 사용 예

  1 <?php

  2 

  3 echo base64_encode('ab');

  4 echo "<br>";

  5 echo base64_encode('abc');

  6 echo"<br>";

  7 echo base64_encode('abcde');

  8 

  9 

 10 ?> 


 [ 결과 ]


 YWI=

 YWJj

 YWJjZGU= 



4의 배수의 공간을 차지하도록 하기 위해서 ' = ' 을 사용하여 공백을 채워준다



* 암호화 과정 : 입력한 값 => base64_encode() -> strrev() -> bin2hex() 함수적용한 값 => $encodeSecret 과 일치해야한다

* 복호화 과정 : $encodeSecret 값을 hex2bin() -> strrev() -> base64_decode() 함수 적용한 값 => 입력한 값 이 반환된다


# 입력값 구하기 ( #vi natas8.php ) ( * hex2bin함수는 php버전에 따라 사용할 수도 있고 없을 수도 있다 )

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 
$encodedSecret = "3d3d516343746d4d6d6c315669563362";
 
function encodeSecret($encodedSecret) {    // 인자값으로 검증값을 입력
    return base64_decode(strrev(hex2bin($encodedSecret)));    // 암호화하는 함수의 반대함수로 복호화
}
 
$res=encodeSecret($encodedSecret);
 
echo $res;
 
?>
 
cs



출력값 : oubWYf2kBq


# Input secret : oubWYf2kBq 제출




natas9: W0mMhUcRRnG8dcghE4qvk3JA9lGt8nDl