티스토리 뷰

보안/CTF

[Web] Recovery 2021 Tamil CTF Writeup

돔돔이부하 2021. 9. 30. 01:10
728x90
반응형

문제 설명 : Help PJ pls, he is a memory loss patient who forgot his password. Try your hacking skills to help him

설명을 봐선 비밀번호를 잃어버린 PJ를 도와서 로그인 해달라고 하는 것 같습니다.

첫 화면은 위와 같습니다. Solve This Challenge 버튼과 Help PJ 버튼이 있는 것 같습니다.

 

우선 첫 번째 메뉴인 Solve This Challenge 버튼을 눌러보았습니다.

이대로 Let Me In 버튼을 누르면 첫 화면으로 돌아가게 됩니다. SQL Injection 이나 기타 타겟은 보이지 않았습니다.

일단 패스하고 두번째 버튼을 눌러 보았습니다.

두 번째 화면에서는 패스워드를 복구하는 페이지 같았습니다. 소스코드 보기를 해보면 가장 최근에 사용했던 패스워드가 뭐였는 지 힌트를 줍니다.

<!-- i think it's tamilctf123 -->
<input style="font-family: 'Nintendoid1';" type="text" name="lastpass">

Last Password 에 tamilctf123 을 입력하고 Reset 버튼을 누르려고 보니 Captcha 가 있습니다. 전 이 Captcha 부분이 제일 어려웠다고 생각하는데요. Cy 까진 알아도 3번째 글자가 B 인지 13 인지 I3 인지 l3 인지 너무 헷갈리더군요. 뒤에도 r 인지 Y인지 p 인지 P 인지 정말 힘들었습니다. 그래서 가능한 모든 문자열을 나열해보고 bruteforce를 해보았을 때 cyB3rpj 인 것을 알게 되었습니다.

 

Reset 버튼을 누르면 아래와 같이 나옵니다.

갑자기 OTP 번호를 입력하라고 나옵니다. Captcha 가 정말 많은데요. 저건 안봐도 하지 말라고 저렇게 많이 놔둔 것으로 생각됩니다. 아래 check 버튼이 있는 것으로 보아서 OTP 를 입력하고 해당 버튼을 누르는 것 같습니다.

솔직히 여기서 OTP 번호가 뭔지 몰라서 1부터 9999까지 bruteforce를 한번 해보자는 생각으로 시도 해보았습니다.

그리고 번호를 알아냈는데, 나중에 알고보니 header 에도 OTP 번호가 있는 걸 알았습니다.

Response Header 부분에 보시면 OneTimePassword: 6412 라고 있습니다.

이렇게 6412 를 치고 들어가보면 아래와 같은 페이지가 나옵니다.

I Have Jopraveen's 쿠키 라고 하네요. 쿠키 모양새를 딱 보자마자 쿠키를 확인해봐야겠다고 생각했습니다. 그리고 위 페이지에서 소스코드 보기를 통해 hidden input 태그를 확인할 수 있었습니다. 아마 이것이 쿠키 값인 가 봅니다.

<h2>I have jopraveen's 🍪🍪🍪🍪</h2>
<h3>Here is it:</h3><br><br>
<div class="hidden">
    <h2>Name: user</h2>
    <h2>Value: please_stop_hamcking_my_account_PJ</h2>
</div>

이 쿠키값을 어디에서 사용하는 지 열심히 찾던 와중에 Solve This Challenge 부분에서 주석을 보았습니다.

<!-- something missing here to /login-->
<form action="/" method="GET">
	<p>email</p>
	<input type="email" value="admin@tamilctf" name="email" id=""><br>
	<p>password</p>
	<input type="password" value="admin" name="pass" id=""><br><br><br>
	<button type="submit">Let me In</button>
</form>

저 주석을 보고서 /login 경로로 가보았습니다.

관리자 만이 flag 를 볼 수 있다고 합니다. 그럼 여기서 쿠키 값을 사용하면 되겠다고 생각해서 쿠키값을 변경하고 새로고침을 해보았습니다.

그리고 나오는 페이지의 소스코드를 보았더니 플래그가 있었습니다.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ADmin?</title>
</head>
<body>
    <div class="main">
        <h1 style="position: relative;top: 40%;">TamilCTF{f1nalLy_U_r3cov3reD_PJ&#39;s_4cCouN7}</h1>
    </div>
</body>
<style>
    html{
        text-align: center;
        background: chartreuse;
        font-family: monospace;
    }
    .main{
        position: absolute;
        top:0;
        bottom: 0;
        left: 0;
        right: 0;
        margin: auto;
        color: chartreuse;
    }
    ::selection{
    color: chartreuse;
}
</style>
</html>

css 스타일로 인해서 가려져서 안보이던 것이었습니다. 플래그는 h1 태그에 존재했습니다.

 

이번 문제는 단순히 HTTP Request/Response Header/Body를 볼 수 있는지에 대한 문제였던 것 같고, 브라우저에서 소스코드 보기를 할 수 있는 지 확인하는 문제였던 것 같습니다.

 

4번째로 쉬운 문제였습니다만 난이도는 거의 비슷비슷한 것 같습니다.

728x90
반응형
댓글