WarGame/SegFault

Admin is Mine

Alioth02 2024. 5. 16. 18:42

문제 접속 후

주어진 계정으로 로그인해 보았다.

loginProc.php 페이지를 통해

사용자 인증 성공 시,

서버에서 JSON 형태로 result:ok 값을 응답하고,

클라이언트가 index.php 페이지를 요청하면서 

index.php 페이지에 로그인이 된 것을 확인할 수 있었다.

좌 : 로그인 후 index.php / 우 : 강제 접근 시 index.php

참고로 로그인이 되지 않았을 때, index.php로 접근하면 다시 로그인 페이지로 돌려보낸다.

반대로 사용자 인증 실패 시,

서버에서 result:fail 값을 응답하는 것을 볼 수 있다.

 

이러한 통신을 보았을 때,

뒤에 로직을 알 수는 없지만,

pw를 통한 인증 결과와는 상관없이

result 값이 ok 라면

index.php 페이지에서 로그인이 된 것으로 간주하는 로직일 것이라고 추측할 수 있었다.

추측을 바탕으로

주어진 계정으로 로그인 요청을 보낸 뒤,

인터셉트 기능을 사용하여

userId 값을 admin으로 바꾸어 요청을 보내고

응답으로 온

result:fail 값을

ok로 변조해서 브라우저에 전달했다.

이후 클라이언트는 index.php를 요청하고

그 요청에 대한 응답으로 

Flag가 적힌 

admin으로 로그인된 index.php 페이지를 반환받을 수 있었다.

<script>location.href='login.php';</script>

참고로 위 스크립트 때문에 브라우저에서는 

로그인 페이지로 이동되어 flag를 보기 힘들다.

해결 방법은 마찬가지로 응답을 받았을 때,

인터셉트 기능을 사용해서 해당 스크립트를 지우고 브라우저에 보내면 사진과 같이 index.php 페이지를 출력할 수 있다.

 

BurpSuite Response Intercept 설정

위와 같이

burpsuite [setting] - [Response interception rules]에서

Response 값을 가로채겠다에 체크해 줘야

우리가 사용하는 intercept 기능에서 서버의 응답 값을 볼 수 있다.