Penetration Testing/Natas

[Natas] Level11 write-up

Jiniloolu 2023. 9. 12. 14:27

Level 11 문제이다.

 

 

로그인 후, 페이지의 배경색을 설정할 수 있는 form이 존재하는 문제이다. 

 

 

소스 코드를 보면... 무슨 말인지 모르겠지만 하나씩 살펴보도록 하자.

 

<body> 부분에서 "showpassword" 가 "yes"일 경우 다음 레벨의 패스워드를 획득할 수 있다. 

즉 data인 쿠키 값을 변조하여 패스워드를 획득하는 문제인 것 같다.

 

그렇다면, 쿠키 값이 어떻게 생성되었는지 확인해보고 💡거꾸로 실행하여 "showpassword"를 yes로 변경해 새로운 쿠키값을 생성해서 넣어준다면? 답이 해결될 것으로 보인다!!

 

 

① 쿠키값을 생성한 과정 확인

- saveData() 함수에서 json_encode > xor_encrypt > base64_encode 순으로 생성하고 있다. 

 

그렇다면, 반대로 base64_decode > xor_encrypt > json_decode 순으로 진행해주면 된다. 

 

② 키 값을 구하기

- xor_encrypt() 함수에서 key 값을 이용해 xor 연산으로 도출된 결과값을 전달한다.

  예로) A xor B = C 인 경우,  A xor C = B 가 된다.

디코딩 된 쿠키값(A) Key 값(B) 인코딩 된 쿠키값(C)
base64_decode key json_encode

  이 공식으로 디코딩 된 쿠키값(A) xor Key 값(B) = 인코딩 된 쿠키값(C) 

                      >> 디코딩 된 쿠키값(A) xor 인코딩 된 쿠키 값(C) = Key값(B) 이므로 Key값을 구할 수 있게 된다.

 

- xor_encrypt() 함수를 활용하여 코드를 작성하자.

1  <?php
2   function xor_encrypt() {
3     $defaultdata = json_encode(array("showpassword"=>"no", "bgcolor"=>"#ffffff"));
4     $key = '';
5     $text = base64_decode('MGw7JCQ5OC04PT8jOSpqdmkgJ25nbCorKCEkIzlscm5oKC4qLSgubjY=');
6     $outText = $defaultdata;
7
8     for($i=0;$i<strlen($text);$i++) {
9     $key .= $outText[$i] ^ $text[$i % strlen($text)];
10    }
11
12    return $key;
13  }
14
15  echo xor_encrypt();
16  ?>

 

4 > 구해야할 key 값

5 > 현재 쿠키값을 base64로 decoding

6 > json_encode() 값

9 > Key 값 = json_endoe() 값  xor  base64_decode()

 

- key 값인 KNHL을 구할 수 있다.

 

 

③ "showpassword" 가 "yes" 일 때의 쿠키값을 구하기

1  <?php
2  function xor_encrypt() {
3     $defaultdata = array("showpassword"=>"yes", "bgcolor"=>"#ffffff");
4     $key = 'KNHL';
5     $text = json_encode($defaultdata);
6     $outText = '';

7     for($i=0;$i<strlen($text);$i++) {
8     $outText .= $text[$i] ^ $key[$i % strlen($key)];
9     }
10
11    return base64_encode($outText);
12  }
13
14  echo xor_encrypt();
15  ?>

3 > "yes" 로 값 변경

4 > key 값 작성

6 > "yes" 일 때의 쿠키값이 반환될 변수

11 > base64 인코딩 되어 나온 값

 

- "yes" 일 경우의 쿠키 값을 확인할 수 있다. 

 

 

Burp 에서 홈에서의 Set color 버튼 클릭 시의 요청값을 잡고 쿠키의 data 값을 위의 결과로 변경해준다. 

 

 

다음 레벨의 패스워드를 획득할 수 있다. 👏