본문 바로가기

드림핵

[드림핵 워게임] php-1

위의 문제를 다음과 같은 과정으로 풀어보았다.

문제에 있는 LFI 취약점은 Local File Inclusion의 약자로, 외부에 있는 txt, php 등의 파일을 내부의 php 파일처럼 사용할 수 있는 취약점이다. 서버 내부의 파일을 가져오는 정보 유출에 많이 이용된다.

 

 

 

1. 페이지의 기능을 확인한다.

드림핵에서 사이트에 접속하면 처음으로 뜨는 페이지이다.

 

 

상단 메뉴에서 List에 접속해보면 flag.php와 hello.json이 있다.

 

 

hello.json을 클릭하면 View 페이지로 이동하며 데이터가 출력된다.

주소를 확인해보면 url에서 파일 경로를 전달하는 것을 볼 수 있다.

 

 

flag.php로 클릭해보면 이 또한 View 페이지로 이동하며 url로 파일 경로를 전달하고 있지만,

flag.php 내용이 아니라 Permission denied라는 문구가 출력되고 있는 것을 확인할 수 있다.

 

 

 

2. 코드를 확인한다.

<h2>View</h2>
<pre><?php
    $file = $_GET['file']?$_GET['file']:'';
    if(preg_match('/flag|:/i', $file)){
        exit('Permission denied');
    }
    echo file_get_contents($file);
?>
</pre>

view.php라는 파일을 열어 코드를 살펴보면 flag.php 파일을 요청했을 때 Permission denied가 뜬 이유를 알 수 있다.

요청하는 file 명에 flag가 들어있으면 Permission denied를 출력하는 것으로 프로그래밍 되어있다.

이때 'flag|:/i'에서 i는 대소문자 구분없이 모두 필터링한다는 의미이다.

 

이 필터링을 우회하기 위해서 다양한 시도를 해보았지만 실패하고 결국 찾아낸 방법은 php Wrapper를 사용하는 방법이다.

 

 

 

3. php Wrapper를 이용하여 익스플로잇 코드를 작성한다.

php Wrapper의 종류는 여러가지가 있지만 우리가 사용할 wrapper는 php://filter 이다.

php://filter 는 다양한 I/O 스트림을 다루는 데 사용된다.

 

익스플로잇 코드는 다음과 같다.

php://filter : I/O스트림을 다루는 데 사용되는 php wrapper

convert.base64-encode : 데이터를 base64로 인코딩하여 변환함.

resource=/var/www/uploads/flag : flag가 있는 파일 경로를 전달함.

 

 

 

4. base64 디코딩을 통해 flag를 획득한다.

익스플로잇 코드를 전송한 뒤 응답된 페이지에서 F12 를 눌러 개발자 도구를 연다. Elements 를 확인해보면 base64로 인코딩된 플래그 정보를 확인할 수 있다.

 

 

base64 디코딩 프로그램을 구글링해서 base64로 인코딩된 플래그 정보를 디코딩하면 flag를 확인할 수 있다.

'드림핵' 카테고리의 다른 글

[드림핵 워게임] session  (0) 2022.11.11
[드림핵 워게임] simple-ssti  (0) 2022.11.11
[드림핵 워게임] proxy-1  (0) 2022.11.11
[드림핵 워게임] blind-command  (0) 2022.11.11
[드림핵 워게임] web-ssrf  (0) 2022.11.06