문제 설명에 LFI 취약점을 이용하라는 말에 해당 취약점을 찾아봤다.
LFI ( Local File inclusion )란?
공격자가 공격 대상 웹 애플리케이션을 통해 서버의 파일을 불러오거나 실행할 수 있게 하는 보안 취약점이다.
- php와 같은 서버 측 스크립트 언어에서 발견되며, 애플리케이션의 입력 검증 부족으로 인해 발생.
- 주로 php 코드 상에서 include() 사용 시 input에 대한 필터링 이루어지지 않아 발생.
웹 서핑을 하며 찾아보면서 적힌 글들을 보면 PHP Wrapper라는 우회 방법을 쓰면 된디고 많이 적혀 있었다.
https://www.php.net/manual/en/wrappers.php
PHP: Supported Protocols and Wrappers - Manual
PHP is a popular general-purpose scripting language that powers everything from your blog to the most popular websites in the world.
www.php.net
이제 문제를 살펴보자.
문제의 main.php의 모습이다.
해당 List에 있는 flag.php를 눌러보자.
dreamhack.games:22348/?page=view&file=../uploads/flag.php
get방식으로 page에 view 넘기고, 접근하고 싶은 파일의 경로를 준거다.
flag.php 안에 있는 걸 보고싶었지만 권한이 없어 거부 됬다. 문제 코드 파일을 살펴보자.
해당 index.php 맨 첫 화면의 코드이다. include 함수를 통해 page 변수에 php 이름을 입력 받는다.
page변수에 view를 주면 view.php 로 이동하는 것이다.
view.php의 코드이다. file 변수에 경로를 줄때, flag라는 문자열이 필터링 되는 것을 볼 수 있다.
문제 설명에 플래그는 /var/www/uploads/flag.php 경로에 있다고 한다.
/var/www/uploads/flag.php 해당 경로에 접근을 해야 flag가 나오는 것을 확인할 수 있는데 flag 단어가 필터링이 되어 flag를 얻지 못하는 상황
그럼 아까 찾아봤던 php wrapper을 사용해봐도 되는거 아닌가? 라는 생각을 했다.
php wrapper 사이트에 들어가 다시 목차를 확인해 보았다.
1. file://
- 로컬 파일 시스템에 접근
2. php://
- I/O stream 방식을 사용하여 접근하기
- base64를 이용해서 encode/decode 형식으로 파일 읽는다.
2번을 택하여 flag 필터링을 우회해보도록 하겠다.
아까의 경로는 /?page=view&file=../uploads/flag.php 이렇게 넘어가는 경로였다.
page에 wrapper를 사용해서 flag.php를 바로 읽는 방식으로 진행해야한다.
view.php에서 flag 문자열을 필터링 하는 과정을 거치지 않아도 된다.
http://host8.dreamhack.games:22348/?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag
해당 위의 우회한 경로를 우회해보면 아래와 같이 flag를 얻을 수 있다.
이 얻을 flag로 decode 해보자.
flag 획득!
'Wargame > Dreamhack' 카테고리의 다른 글
[System] Return Address Overwrite Write-up (0) | 2025.05.14 |
---|---|
[Web] Ctrl-C Write-up (0) | 2025.05.13 |
[Forensic] snowing! Write-up (0) | 2025.05.12 |
[Forensic] FFFFAAAATTT Write-up (0) | 2025.02.21 |
[Forensic] Basic_Forensics_1 Write-up (0) | 2025.01.30 |