Webhacking Writeup 28번 문제입니다.
(본 문제는 멘토님의 도움을 받아 해결하였습니다.)
문제사이트에 접속해보면 flag.php에 대한 링크를 주며 파일업로드를 flag.php와 동일한
디렉터리에 업로드가 가능하다고 합니다.
주어진 flag.php링크로 접속해보면
아무것도 없는 페이지가 출력됩니다.
멘토님은 대부분 워게임이나 CTF등의 문제는 php코드인 경우
<?php
/* flag */
?>
위의 구조 처럼 flag를 주석처리하고 페이지를 구성하는 문제가 주를 이룬다고 합니다.
해서 이를 해결하기 위해서는 사용하는 서버가 무엇인지 확인하거나 명령어로 열어보는 등
여러 방면의 접근이 필요하다고 했습니다.
먼저 서버 확인을 위해 오류를 출력하는 방법은 많지만 이 문제 같은 경우 url을 잘못 입력하면
어떤 서버를 이용중인지 출력해주는 부분이 삽입되어 있다고 합니다.
해서 flag.php 부분에서 p를 지워 flag.ph로 입력해 출력하면
사용중인 서버는 아파치 버전은 2.4.29를 사용중인 것을 확인할 수 있었습니다.
아파치 공식문서를 확인해보면
.htaccess 파일이라는 것이 존재하는데 이파일은 같은 디렉터리에 있는 파일을 어떻게 서비스할지
정해주는 파일이라고 합니다. 앞에 도트(.)가 붙어 숨은 파일이라고도 합니다.
보통은 이러한 중요한 파일은 보통 파일업로드가 가능한 곳에 위치시킬 경우 보호를 걸어두거나
이름변경등 조치를 취하는데 워게임 문제는 공부를 하기위한 환경이기에
.htaccess 파일의 이름이 바뀌지 않았다고 가정하는 접근법이 필요하다는 애기를 들었습니다.
그러면 .htaccess를 업로드해 덮어쓰는 것으로 공격자가 원하는 방식대로 바꾸는데
어떠한 코드를 입력해 업로드해야 하는가?
이는 다시 우리가 접속하는 구조와 연관되는데 아래그림을 살펴보면
사용자는 서버 여기서는 아파치이며 서버에 사용자가 요청하면
서버는 PHP 에게 요청을 합니다 그러면 PHP 는 결과를 다시 웹서버에 전송해주고
서버가 전송받은 결과를 사용자에게 보여주는 형태를 가지고 있습니다.
즉 서버와 php는 엔진이 분리되어 있다고 볼 수 있는 것입니다.
만약 php 엔진을 멈추게 하는 요청을 보낸다면?
php는 결과를 도출하지 않고 가지고 있는 코드를 그대로 웹서버에게 결과를 전송하게 됩니다.
즉 소스코드 자체를 웹서버에 전송하게되고 이를 사용자가 받게 되는 것입니다.
엔진을 끄는 구문을 .htaccess로 만들어 파일업로드 한뒤
flag.php에 접속하게 되면
flag.php의 엔진이 off되어 코드를 파서 하지 않고 코드 그 자체를 결과로 전송하게 됩니다.
받은 코드를 살펴보면 FLAG가 변수로 선언만 되고 출력이 없어서 아무것도 없는 페이지가
나왔다는 것을 확인하면서
FLAG를 제출하고
문제를 해결하였습니다.
'Wargame(Web) > Webhacking.kr Writeup' 카테고리의 다른 글
Webhacking Writeup alien golf문제 (0) | 2022.11.30 |
---|---|
Webhacking Writeup 30번 문제 (0) | 2022.10.28 |
Webhacking Writeup 35번 문제 (0) | 2022.09.26 |
Webhacking Writeup 25번 문제 (0) | 2022.09.26 |
Webhacking Writeup baby 문제 (0) | 2022.09.26 |