어랴랴.. 이게 무얼까나..
쿠키들이 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인 쿠키값)
defaultdata의 showpassword값을 yes로 변경.
defaultdata를 json_encode -> xor_encryption -> base64_encode 를 하여 쿠키값을 구한다.
와 개힘들다.
'overthewire.org' 카테고리의 다른 글
[OverTheWire.org_natas] level 9 -level 10 (natas11 password) (0) | 2022.01.27 |
---|---|
[OverTheWire.org_natas] level 8 - level 9 (natas10 password) (0) | 2022.01.27 |
[Overthewire.org_natas] level 7 - level 8 (natas9 password) (0) | 2022.01.26 |
[Overthewire.org_natas] level 6 - level 7(natas8 비번 구하기) (0) | 2022.01.26 |
[Overthewire.org_natas] level 5 - level 6(natas7 비번 구하기) (0) | 2022.01.24 |
댓글