2017. 9. 23. 18:40ㆍWebHacking/[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() 함수 적용한 값 => 입력한 값 이 반환된다
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
'WebHacking > [OverTheWire]Natas' 카테고리의 다른 글
[ Natas 10 -> Natas 11 grep 다중명령어 ] (0) | 2017.09.23 |
---|---|
[ Natas 9 -> Natas 10 grep 다중명령어 ] (0) | 2017.09.23 |
[ Natas 7 -> Natas 8 URL ] (0) | 2017.09.23 |
[ Natas 6 -> Natas 7 직접참조(include) ] (0) | 2017.09.23 |
[ Natas 5 -> Natas 6 쿠키값 변조 ] (0) | 2017.09.23 |