26th hackingcamp ctf/Web

26회 해킹캠프 CTF : 지금 무슨 노래 듣고 계세요? - [Web]

Roronoa 2023. 2. 15. 12:56
반응형

문제 설명

[그림 1] 문제 정보

먼저 해당 사이트에 들어가겠다.

 

[그림 2] main page

메인 페이지를 보니 PW를 입력하는 창이 있다.

정보가 부족하니 소스보기를 해서 확인 하겠다.

 

메인 페이지 소스코드

<!DOCTYPE html>
<html onselectstart="return blockSelect()" oncontextmenu="return blockRightClick()">
  <head>
    <meta charset="utf-8">
    <title>지금 무슨 노래 듣고 계세요?</title>
    <link rel="stylesheet" href="WinterHC.css">
    <script type="text/javascript" src="WinterHC.js"></script>
  </head>
  <body>
    <h1> 🎧 지금 무슨 노래 듣고 계세요?</h1>
    <div>
      ↓↓↓ <br>
    <div class="hide">
      86931336e61585356646332657472385a49365a5a76585954493655667a475a577c68435
    </div>
    </div>

    <!--
    function makeSecret($password) {
      return strrev(bin2hex(base64_encode($password)));
    } -->
    <br>
    <form action="index.php" method="POST">
      <table class="login">
          <td>PW</td>
          <td><input type="password" name="pw"></td>
      </table>
      <input type="submit" name="SignIn" value="Sign In">

      <h3>Wrong Password!</h3>
    </form>
  </body>
</html>

숨겨진 값이 86931336e61585356646332657472385a49365a5a76585954493655667a475a577c68435인 것을 알 수있고 주석에 Secret를 만드는 함수가 있다.

이것을 역으로 연산하면 password를 구할 수 있을 것이다.

개발자 도구  network에서 해당 페이지를 확인하면 이 페이지는 php로 만들어졌음을 확인할 수 있다.

 

makeSecret함수를 보면 먼저 base64로 인코딩 되었고 bin2hex() 함수로 문자열을 16진수로 변환하였다. 마지막으로 strrev() 함수를 통해 문자열을 뒤집었다.

base64 => bin2hex => strrev()

이 과정을 역으로 하면 된다.

bin2hex가 문자열을 16진수로 변환하니 16진수를 문자열로 변환하면 된다.

strrev() => hex2bin => base64

 

코드

import base64

str = "86931336e61585356646332657472385a49365a5a76585954493655667a475a577c68435"

# reverse the string
reversed_str = str[::-1]

#convert hex to ASCII
hex_to_string = bytes.fromhex(reversed_str).decode('utf-8')
#print(type(hex_to_string))

#decode base64
base64_decode = base64.b64decode(hex_to_string).decode('utf-8')
print(base64_decode)

[그림 3] 코드

그림 3을 통해 password를 구하였다. password는 Hypeboy_Cause_I_know_It's_a이다.

 

[그림 4] pw입력

pw를 입력하니 힌트가 주어진다.

힌트를 보니 쿠키를 확인하면 될 것같다.

 

[그림 5] 쿠키 확인

쿠키를 보니 WhatSong? 쿠키에 value값이 Hypeboy라고 되어있다.

힌트를 보면 하입보이가 아니라 NEwJeaNs_Co0ki3라고 하니 WhatSong? 쿠키의 value를 NEwJeaNs_Co0ki3로 바꾸면 문제가 해결될 것이다.

 

[그림 6] flag 출력

쿠키를 변조한 후 새로고침을 하니 flag가 출력되었다.

단순한 쿠키 변조 문제이다.

 

플래그

HCAMP{WHat_sOng_Are_Y0u_List3nin9_To?_NEwJeaNs_Co0ki3}
반응형