드림핵 문제인 php-1을 풀어보았다...
문제 정보에서도 제시했듯이 LFI 취약점을 이용하는 것 같고, 플래그는 /var/www/uploads/flag.php 이곳에 있다고 친절하게 적혀있다.
그렇다면 고~!
이렇게 flag.php가 보인다.
다~~~~~~~~ㅇ연히 나오지 않는다.
이 부분에서 /flag가 있을 때 Permission denied가 나오게 되어있다.
단서는 아무래도 LFI. 이 단서를 적극 활용해야 하는 것 같다. index.php에서 main.php를 include 함수를 통해 GET방식으로 불러오는 것도 잊지 말자!!!
다시 정리, 그러면 우리는 LFI 취약점이라는 단서와 view.php를 거치지 않아야 한다는 단서를 얻었다.
그럼 index.php에서 바로 열람하는 공격기법이 LFI라면? flag.php을 view에서 필터링되지 않고 바로 볼 수 있다는 것이다
우선, LFI 공격이란?
웹브라우저를 통해 공격 대상 서버에 위치한 파일을 포함시켜 읽어오는 공격을 의미한다. 즉, 공격 대상 서버에 있는 디렉터리로 접근하여 원하는 파일을 열람할 수 있다.
여기서 우리는 LFI에서 php wrapper를 이용한 LFI를 진행해볼 것이다.
wrapper는 개발자들의 개발을 돕기 위해 만들어진 기능이며, 실제 데이터의 앞에서 틀을 잡아주는 데이터 또는 다른 프로그램이 실행되도록 설정하는 프로그램이다.
수많은 wrapper 중에서 많이 쓰는 wrapper를 소개해보겠다.
1.php://filter
php://filter는 다양한 I/O stream을 다루는 데 사용하는 wrapper이다.
encode / decode 옵션을 사용해서 서버 안에 있는 문서들을 열람할 수 있다.
예) www.farmfarm.io/index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
위와 같이 실행시킬 경우, base64방식으로 인코딩된 /etc/passwd가 나온다.
2. expect://
expect wrapper는 system command를 실행시킨다.
예) www.farmfarm.io/index.php?page=expect://ls
위와 같이 실행시킬 경우, 디렉토리에 있는 목록을 보여준다.
3.zip://
zip wrapper는 zip파일의 압축을 풀고 압축을 푼 파일 안에 코드를 실행시켜 준다.
예) www.farmfarm.io/index.php?page=zip://file.zip#webshell.php
webshell을 실행시킬 수 있게 된다.
여기서 1번을 사용해서 page를 php://filter로 base64 인코딩하고 출력할 파일을 아까 알려준 경로인
/var/www/uploads/flag를 사용한다.
즉, http://host1.dreamhack.games:18156/?page=php://filter/convert.base64-encode/resource=/var/www/uploads/flag
위와 같이 입력하면 flag.php가 base64로 인코딩 되어 출력된다.
PD9waHAKCSRmbGFnID0gJ0RIe2JiOWRiMWYzMDNjYWNmMGYzYzkxZTBhYmNhMTIyMWZmfSc7Cj8+CmNhbiB5b3Ugc2VlICRmbGFnPw==
이렇게 flag 값이 나온다.
주의 사항.
이 부분에서 .php가 존재하기 때문에 /var/www/uploads/flag.php 라고 적어서는 안 된다.
ps. 여기서 많이 헤맸다... 여러분들은 이걸 보고 아까운 시간 낭비하지 마시길...
'보안' 카테고리의 다른 글
[DreamHack] Carve Party- 키보드 치는 농부 (0) | 2022.03.16 |
---|---|
[DreamHack] command injection-1 - 키보드 치는 농부 (0) | 2022.03.08 |
댓글