dreamhack php-1 |
php로 작성된 웹에서 LFI 취약점을 이용해서 플래그를 획득하는 문제이다. 문제를 해결해보자
문제 풀이
먼저 문제 풀이에 앞서서 LFI 취약점을 이용하라고 설명에 나와있는데 LFI가 뭔지부터 알아보자
LFI(Local File Inclusion) : 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격 쉽게 이야기해서, 공격 대상 서버에 있는 디렉토리로 접근해서 원하는 파일을 열어보는 것 |
플래그가 /var/www/uploads/flag.php에 위치하기때문에, 서버의 flag.php가 위치한 경로로 접근해서
플래그를 읽어내라는 것이다.
먼저 문제 사이트에 접속하면 위와 같이 나온다. 하나씩 눌러보다가 list를 눌러보니 인덱스처럼 아래와 같이 표시된다
내가 찾는 flag.php가 보인다. 한번 클릭해보자
url을 보면 아래와 같다
http://host1.dreamhack.games:14894/?page=view&file=../uploads/flag.php |
즉 get방식으로 page에 view를 주고 , 내가 접근하고자 하는 file의 path를 준것인데, permission이 denied 되었다.
여기까지 정보들을 사이트에서 파악한 뒤에 문제를 보자.
먼저 index.php다. 메인에 해당하는 사이트인데, include함수를 통해서 page 변수에 php 이름을 입력받는다.
즉 page 변수에 아까처럼 view를 주면 view.php로 이동하는 것
근데 왜 아까 flag를 보려고 할때 permission이 거부 당했을까?
view.php를 보면, file 변수에 경로를 줄때, flag라는 문자열이 필터링 되는것을 볼 수 있다.
즉 여기까지 상황을 종합하자면 아래의 경로에 존재하는 플래그에 접근해야하는데
flag 문자열이 필터링 되어 접근하지 못하는 상황 !.
php에서 flag를 우회하는 방법에 대한 구글링을 하던 중, php wrapper를 사용해서 flag 필터를
우회하는 방법이 있다는 것을 알게 되었다.
1. php://filter + I/O stream을 사용하는 wrapper + base64를 이용하여 encode/decode 형식으로 파일을 읽는다 2. expect:// + system command를 실행 ex) ls, whoami, cd 등등 (리눅스에서 활용) 3. zip:// + 경로의 파일의 압축을 해제 한 후, 해제된 파일을 실행 |
여기서 1번 php://filter를 사용해서, 아까처럼 page=view&file=path를 주는것이 아니라,
page에 wrapper를 사용해서 flag.php를 바로 읽는 방식으로 접근한다. 그렇게 되면 view.php에서 flag 문자열을 필터링하는 과정을 거치기 않게 된다
http://host1.dreamhack.games:14894/?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag |
위와 같이 우회해서 flag를 접근하면 flag를 획득할 수 있다.
PD9waHAKCSRmbGFnID0gJ0RIe2JiOWRiMWYzMDNjYWNmMGYzYzkxZTBhYmNhMTIyMWZmfSc7Cj8+CmNhbiB5b3Ugc2VlICRmbGFnPw |
base64로 convert 된 것이기떄문에 다시 decoding 해주면
플래그 획득 성공 !
'개인 공부 > WEB' 카테고리의 다른 글
[웹해킹] dreamhack file-download (0) | 2021.07.26 |
---|---|
[웹해킹] dreamhack image-storage (0) | 2021.07.26 |
[웹해킹] dreamhack cookie (1) | 2021.07.26 |
[웹해킹] sf ctf 제출문제 해설 (0) | 2021.07.18 |
[웹해킹] XSS GAME - LEVEL 6 (0) | 2021.07.13 |
댓글