본문 바로가기
Wargame/Dreamhack

[Dreamhack] php-1

by jjudy 2022. 4. 25.

php로 작성된 사이트에서 LFI 취약점을 이용해 플래그를 획득하는 문제이다.

 

 


LFI(Local File Inclusion) 취약점이란?

 

웹 브라우저를 통해 서버에 파일을 포함시키는 과정이다.

즉, 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격이다.

이 취약점은 인클루드 시, 페이지 경로가 적절히 필터링되지 않거나 디렉토리 변경 명령어들의 삽입을 허용했을 때 일어난다.
대부분 LFI 취약점은 URL을 통해 이뤄지게 된다.

 

 

 

 

메인 화면

 

List 탭 클릭 후 화면

 

flag.php 파일 클릭 후 화면

 

flag.php 파일 클릭 시, Permission denied 문구가 뜬다.

이때, url을 보면, http://host1.dreamhack.games:10625/?page=view&file=../uploads/flag.php 로 표시가 된다.

 

 

 

기본적인 LFI 공격은 위와 같은 결과가 나타난다.

http://host1.dreamhack.games:10625/?page=view&file=../../../etc/passwd 

 

 

이런 식으로, etc/passwd 파일을 읽어왔다. 

그러나, 위에서 uploads/flag.php를 읽어 올 때 permission denied가 떴다.

 

 

 

코드를 살펴보면,

$file 변수에 경로를 줄 때, preg_match 함수에서, flag 문자와 ' : ' 문자를 필터링 하고 있다.

 

 

 

 

우회 공격을 찾아보다가, LFI 공격 시 php wrapper 를 사용하여 우회할 수 있다고 한다.!

php wrapper란, 쉽게 말해 wrapper의 뜻대로 감싼다는 개념이다.

 

 

 

 

 

다시 문제로 돌아와서,

view 페이지에서 php wrapper로 공격하려 했으나, preg_match에서 ':' 문자열을 필터링 하고 있다.

그렇다면, page=view&file=path 에서 file이 아니라 page에 wrapper를 해주면 필터링하는 과정을 거치지 않게 된다.!!

 

 

 

 

php://filter를 한번 적용해보자!

 

마지막에 .php 는 빼고 url을 적어주면 된다.!

http://host1.dreamhack.games:10625/?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag

 

 

 

base64로 인코딩 된 flag.php 내용이 출력된다.

 

 

 

base64로 디코딩을 해보면 flag를 획득할 수 있다.

'Wargame > Dreamhack' 카테고리의 다른 글

[Dreamhack] pathtraversal  (0) 2022.04.25

댓글