Local File Inclusion - Wrappers

 

 

 

 

 

flag를 찾으면 되는 문제이다.

 

 

 

 

 

문제 화면으로 들어가면 파일을 선택하여 업로드할 수 있는 기능이 있다.

 

 

 

 


문제풀이

 

 

 

 

업로드 기능을 이용하여 .php 파일을 업로드해보면

 

 

 

 

다음과 같이 JPG파일만 업로드 할 수 있다는 결과와 page파라미터를 볼 수 있다.

 

페이지에 index우리가 처음 보았던 페이지로 이동한다.

../는 필터링 되어있으며 .와 /는 개별적으로 필터링 되어있지않다.

 

.만 입력하였을 때

 

 

 

우리가 입력한 값 뒤에 .php가 붙어서 파일을 여는 것을 알 수있다.

 

 

 

문제의 제목을 보면 Wrappers를 이용하여 문제를 해결해야함을 알 수 있다.

이전에 풀었던 LFI문제와 같이 php://를 사용하여 풀려고 하면 php는 필터링이 걸려 사용할 수 없고

system command를 실행 할 수 있는 expect://

 

 

 

 

다음과 같이 지원하지 않음을 알 수 있다.

 

 

File upload를 할 수 있는점을 이용할 수 있는 zip:// 을 이용하여 문제를 풀 수 있다고 생각했다.

zip:// 필터는 업로드된 .zip 파일을 서버측에서 저장된 파일을 압축 해제하여 압축을 푼 파일안에 있는 파일을 실행 시켜준다.

 

하지만 zip파일을 바로 업로드 할 수 는 없기 때문에 압축한 파일의 확장자를 .jpg로 바꾸어준다.

 

 

 

 

파일을 업로드하고 확인해보면 tmp/upload 위치에 파일명이 바뀐 채로 저장되어 있음을 알 수 있다.

zip://zip파일이름#풀렸을 때 파일 이름  -> #은 url encoding 하여 %23

 

 

Input : page = zip://tmp/upload/(이미지파일)%23(읽을 파일)

파일명이 한 글자를 넘어가면 page name too long이 나온다.

 

 

 

 

본인은 다음과 같이 scandir을 이용하여 해당 디렉토리에 있는 파일들을 알기 위해서 사용하였다.

이 .php파일을 실행시킨 결과는

 

 

 

 

다음과 같이 flag가 들어있는 php파일을 얻을 수 있으며 해당 파일을 읽을 수 있게 php파일을 수정해주면 flag를 얻을 수 있다.


<?php eval($_GET['cmd']); ?>

'Web hacking > Root me' 카테고리의 다른 글

[Root-me] - PHP - Eval  (0) 2019.12.03
[Root-me] - File upload - ZIP  (0) 2019.12.03
[Root-me] PHP - Serialization  (0) 2019.11.16
[Root-me] SQL injection - Error  (0) 2019.10.07
[Root-me] SQL Injection - Routed  (0) 2019.10.01

+ Recent posts