문제 설명

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

메인 페이지를 보니 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을 통해 password를 구하였다. password는 Hypeboy_Cause_I_know_It's_a이다.

pw를 입력하니 힌트가 주어진다.
힌트를 보니 쿠키를 확인하면 될 것같다.

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

쿠키를 변조한 후 새로고침을 하니 flag가 출력되었다.
단순한 쿠키 변조 문제이다.
플래그
HCAMP{WHat_sOng_Are_Y0u_List3nin9_To?_NEwJeaNs_Co0ki3}