※ CTF - Capture The Flag
※ 문제 푸는 방법이 다양할 수도 있습니다.
1. 주어진 정보 : 계정 하나 (ID / PW : doldol / dol1234), 목표는 admin 계정으로 접속하기.
2. 정상 로그인해서 과정 살펴보기.
→ response를 조작해보자.
→ proxy setting에서 아래와 같이 response inerception rules을 활성화하고 체크 해준다.
→ doldol로 로그인 한 상태에서 뒤로가기를 하여 로그인페이지로온다.
→ 인터셉트 모드를 켜고,
→ admin을 입력하고 pw는 아무거나 넣어준다.
4. 성공
5. 다른 방법 확인
→ 자바스크립트가 로그인 처리를 하고 있다. 스크립트는 클라이언트 단에서 실행하는 것이라 조작이 가능하다.
→ 코드를 보면 resultData 값이 "ok"이면 주석에 로그인 성공이라고 친절히 작성되어 있고, index.php로 리다이렉션 한다.
→ if (resultData == "ok") 부분을 if (resultData == resultData) 로 수정했다.(ctrl+S)
→ 그리고 id에는 admin, pw는 아무거나 입력하고 로그인을 누르면
6. 성공
→ 이 또한, doldol로 로그인되어 있는 상태에서 로그인 창으로 와야한다.
→ 확실히는 잘 모르겠지만 아마 세션 id를 덮어쓰는 방식인건지?? (아시는 분 댓글 달아주시면 감사하겠습니다.)
→ Burp suite로 response를 수정해도 되고, response를 받아서 작동하는 JS를 수정해도 된다.
7. 잘 몰랐던 부분 (수업듣고 이해함.)
● doldol로 로그인 해서 뒤로가기 ☞ admin ☞ result 위조로 해야만 되었던 이유
→ burp suite로 잘 살펴보면 정상로그인 과정은 login.php ☞ loginProc.php ☞ index.php
→ ID를 admin으로 바꾸고 response를 수정해서 로그인을 시도할 경우 login.php ☞ loginProc.php ☞ login.php
→ 인터셉터에서 살펴 보면 <script>location.href='login.php';</script> 스크립트가 껴있다.
→ 아마도 세션ID로 로그인 체크 후, 로그인 상태가 아니라면 로그인 페이지로 튕겨내는 코드로인해 발생한 스크립트인 것 같다.
→ 즉, 정상 로그인이 되지 않았으니 login.php로 다시 보내는 것으로 보이는데
→ 사실 잘 살펴보면 플래그가 있다.
→ 즉, 로그인이 완료되지 않았음에도 로그인 후에 보여야할 값이 보인 헛점이 있었던 것이다.
→ 나는 doldol이라는 정상 로그인된 세션ID가 있었기 때문에, login.php 페이지로 튕기지 않고 index.php로 가서 플래그가 보였던 것이다.
→ 로그인 과정을 면밀히 살펴본 것이아니고, 문제를 빨리 풀기위해 이것 저것하다가, 맞춰버리니 로직이 정확히 파악되지 않았던 것이 문제였다.
Segfault CTF - (5주 차) Login Bypass 2 (1) | 2024.05.21 |
---|---|
Segfault CTF - (5주 차) Login Bypass 1 (0) | 2024.05.21 |
Segfault CTF - (5주 차) Pin Code Crack (1) | 2024.05.20 |
Segfault CTF - (5주 차) PIN CODE Bypass (0) | 2024.05.20 |
Segfault CTF - (5주 차) Get Admin (0) | 2024.05.20 |