본문 바로가기
overthewire.org

[OverTheWire.org_natas] level 10 - level 11 (natas12 password)

by MININI 2022. 2. 16.

어랴랴.. 이게 무얼까나..

쿠키들이 XOR암호화로 보호되어있다..?

그리고 배경 색: #ffffff (흰색? 맞겠지) 

색을 내가 바꿀 수 있는 건가보다..

우..우와.. 예브다 ㅎㅎ
쿠키값..


 

일단 소스코드를 보자

해석을 찬찬히 해보지앙..ㅠ

xor_encrypt()
: 파라미터로 들어가는 문자열을 xor 암호화로 변환 후 outText로 반환..
(xor 암호화는 반전되는 것이 특징이기 때문에 한번 더 암호화하면 원래대로 돌아온다고 한다.)

 

loadData($def)
: 쿠키에 data라는 키 값이 있으면, tempdata에 쿠키의 data 키에 대응하는 값을 base64_decode -> xor 암호화
->  json_decode로 배열로 변환한 값을 넣음.
그래서 매개변수로 넣은 데이터 값에 쿠키로 얻은 tempdata의 값으로 바꿈.

jason_decode($json, boolean)
: JSON형식 문자열을 배열 또는 객체로 변환하는 PHP 함수(2번째 인수가 true이면 배열로.)


 

 

 

saveData($d)
: 쿠키값을 data라는 이름으로 매개변수를 json_encode, xor_encrypt, base64_encode한 값으로 넣는다.

 

$data의 값을 $defaultdata를 loadData()한 값으로 초기화.

( "showpassword"=>"no", "bgcolor"=>"#ffffff")

 

data['bgcolor]'의 값을 $_RQUEST['bgcolor']로 바꿔준다. (이래서 우리가 배경색 변경할 수 있는 거)

 

saveData($data): $data를 암호화 후 쿠키값으로 설정.

data의 showpassword값이 yes면 natas12의 비번 print

 


 

$data의 값을 $defaultdata를 loadData()한 값으로 초기화할 때 COOKIE의 data를 사용하니까

COOKIE의 값을 적절히 바꿔서 showpassword값을 yes로 변경해 주어야 함.

 

1. 일단 xor_encrypt의 key를 알아내야 함.

 

key값을 구하려면 XOR의 특징에 대해 이해하고 있어야 한다.

A^B = C라고 하면 A^C=B가 되는 성질을 이용한다.

 

암호화된 바이트는 키로 XOR되어 일반 텍스트가 됨.
암호화된 일반 텍스트를 XOR하면 키가 생성됨.

 

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

여기서 outText와 key를 서로 바꾸면 됨. 

 

그래서 key 값은 qw8J

 

 

2. 이제 우리가 수정해줄 쿠키값을 구해야됨. (showpassword가 yes인 쿠키값)

$key의 값을 qw8J로 변경 한 뒤,,,

defaultdata의 showpassword값을 yes로 변경.

defaultdata를 json_encode -> xor_encryption -> base64_encode 를 하여 쿠키값을 구한다.

 

쿠키값을 위에서 구한 값으로 변경을 해주면?!!

 

드디어................. 구하미....니

와 개힘들다.

댓글