Natas Level 22 입니다.
Level 22 메인 페이지 입니다. 보시다시피 텅 비어있습니다.
소스코드를 살펴봅시다.
소스코드입니다.
위, 아래로 크게 두 부분이 있는데요
첫번째는 GET방식으로 받은 요청에 "revelio" 가 존재하고 현재 세션이 admin이 "아닐 경우"
header 함수에 의해 /(메인페이지) 위치로 리다이렉션 되는 함수입니다.
두번째는 GET방식으로 받은 요청에 "revelio" 가 존재할 경우 다음 레벨의 password를 출력합니다.
음.... 그러니까 GET방식으로 revelio 를 입력하면 되는 것 아닌가?
입력해 보겠습니다.
URL에 그대로 입력해도 됩니다. (GET방식은 URL상에 그대로 모든 파라미터가 노출되는 방식입니다)
revelio=1 입력했습니다.
그러나 반응이 없군요. password 획득 조건은 GET방식 요청에 "revelio"가 존재하면 되는건데 말이죠.
소스코드를 다시 살펴봅시다.
위쪽에 있는 코드인데요, 여기가 문제가 되는 부분입니다.
바로 header("Location: /"); 함수에 의한 리다이렉션인데요. 이 기능 때문에 password가 출력되더라도 바로 메인 페이지로 리다이렉션 되어 우리가 눈으로 볼 수 없는 겁니다.
두번째 if문에 해당되지 않으면 리다이렉션 되지 않을 수 있는데... 그 조건이 admin 세션을 획득한 상태여야 하는군요.
현재로썬 불가능한 조건입니다. 우리의 최종 목적이 admin 세션을 획득하는 것 이니까요.
그렇다면, Burp Suite로 우리가 GET요청을 보내고 리다이렉션이 되는 과정의 모든 패킷을 확인해서, password가 있는지 확인해 봅시다.
결국 리다이렉션 되는 과정도 하나의 패킷이니, 그 사이에 password가 출력된 패킷을 확인할 수 있을지도 모릅니다.
URL칸에 이렇게 입력하고, 엔터를 누르는 상황을 패킷으로 잡고, 바로 전송해 줍시다.
그리고 HTTP history 탭으로 들어옵시다. 여기서 주고받아진 모든 패킷을 확인할 수 있습니다. 리다이렉션 과정까지도요.
두번째 패킷이 보이시나요? 우리가 입력한 ?revelio=1 값이 살아있고, 이후 리다이렉션을 요청하는 302 상태코드가 존재합니다.
그 아래에, 바로 /(메인페이지) 위치로 이동한 패킷이 존재하고 상태코드는 200(요청성공) 입니다.
두번째, revelio값이 잘 전달된 패킷을 확인해 봅시다.
두번째 패킷 Response 입니다. 아래쪽을 잘 보시면..
28, 29행에 password가 출력된 모습을 보실 수 있습니다.
revelio 값만 잘 전달하면 password를 획득할 수 있는 쉬운 조건이었지만, 리다이렉션 문제를 해결하는게 중점인 문제였습니다.
다만, 조금 헷갈리는 것은 리다이렉션 부분이 먼저 나오고 password 획득부분은 아래쪽에 있는데
어째서 패킷을 확인하면 password를 먼저 출력해주고 리다이렉션을 나중에 하는건지? 순서가 반대로 된 게 아닌가..
이유를 아시는 분 알려주시면 감사하겠습니다.
'Hacking > [Web]Natas' 카테고리의 다른 글
OverTheWire [Natas Level 24] (3) | 2023.04.11 |
---|---|
OverTheWire [Natas Level 23] (0) | 2023.04.11 |
OverTheWire [Natas Level 21] (0) | 2023.04.04 |
OverTheWire [Natas Level 20] (0) | 2023.04.04 |
OverTheWire [Natas Level 19] (0) | 2023.04.04 |