php로 작성된 사이트에서 LFI 취약점을 이용해 플래그를 획득하는 문제이다.
LFI(Local File Inclusion) 취약점이란?
웹 브라우저를 통해 서버에 파일을 포함시키는 과정이다.
즉, 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격이다.
이 취약점은 인클루드 시, 페이지 경로가 적절히 필터링되지 않거나 디렉토리 변경 명령어들의 삽입을 허용했을 때 일어난다.
대부분 LFI 취약점은 URL을 통해 이뤄지게 된다.
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 |
---|
댓글