두번째 Local File Inclusion 문제
(첫번째 : https://hackingstudypad.tistory.com/243)
조금 더 발전된 LFI 형태이다.
문제페이지에 접속하면 이런 화면이 뜬다.
웹페이지 기능을 알아보기 위해
메뉴들을 눌러봤는데
CV 메뉴를 들어가면 URL이 ?page=cv 로 바뀌고,
Contact 메뉴를 들어가면 URL이 ?page=contact 로 바뀌는 것을 볼 수 있다.
이런식으로 웹 페이지를 구현할 경우, PHP 환경에서 include() 함수를 사용하는데,
적절한 필터링이 없다면 LFI(Local File Inclusion) 취약점이 발생하게 된다.
LFI는 말 그대로 서버 내에 있는 파일을 불러와 읽을 수 있는 취약점이다.
단순히 웹 페이지의 소스코드 뿐만 아니라 /etc/passwd 와 같인 비밀번호 파일들도 유출이 가능하다.
지난번 문제처럼
../../../ 를 이용해 LFI 공격을 시도했으나
필터링이 걸려있는지 Attack detected 라는 문구가 출력되었다.
문제 제목에서 Double Encoding 이라고 힌트를 줬으니 적용해본다.
온라인 URL 인코딩/디코딩 해주는 사이트를 이용해 확인해보면
. 을 URL 인코딩하면 %2E
/ 를 URL 인코딩하면 %2F 인것을 알 수 있다.
Double Encoding 이니 한번 더 인코딩을 해줘야 하는데
바로 %2E %2F 앞에있는 % 를 인코딩 해줘야 한다.
%는 URL 인코딩하면 %25 가 된다.
URL에 %252E 라고 입력한다면
첫번째로 디코딩 되면서 %2E 가 되고,
다시한번 디코딩 되면서 . 이 되는것이다.
실제로 문제페이지에서
URL에 %252E%252E%252F 라고 입력하면
../ 가 제대로 들어가는 것을 볼 수 있다.
LFI 가능성을 확인했으니
home 페이지의 소스코드를 가져와본다.
소스코드를 가져올 때는 PHP wrapper 를 사용한다.
php:// 형태로 사용할 수 있고 이걸 사용하면
filter 기능을 이용해서 인코딩을 할 수 있다.
사용되는 구문은
php://filter/conver.base64-encode/resource=home 인데
여기에 있는 모든 . 과 / 를 더블인코딩 해줘야 한다.
?page=php:%252F%252Ffilter%252Fconvert%252Ebase64-encode%252Fresource=home
이렇게 입력해주면
base64로 인코딩된 값이 아래 출력된다.
CyberChef(https://gchq.github.io/CyberChef) 에서 base64 디코딩을 할 수 있다.
base64 디코딩을 해보면
이전에 보지 못했던 conf.inc.php 라는 파일이 있는것을 확인할 수 있다.
?page=php:%252F%252Ffilter%252Fconvert%252Ebase64-encode%252Fresource=conf
마지막 부분만 conf 로 바꿔서 추출해준다.
다시한번 CyberChef에서 base64 디코딩을 해주면
플래그를 찾을 수 있다.
'워게임 > Root Me' 카테고리의 다른 글
[Root Me] Command & Control - level 2 - 포렌식 / Volatility (64) | 2022.09.06 |
---|---|
[Root Me] ELF x86 - Stack buffer overflow basic 1 - 포너블 / 버퍼오버플로우 (36) | 2022.09.03 |
[Root Me] Local File Inclusion - 웹해킹 / LFI (51) | 2022.08.25 |
[Root Me] DNS - zone transfert - 네트워크 / dig (68) | 2022.08.22 |
[Root Me] Java - Server-side Template Injection - 웹해킹 / SSTI (46) | 2022.08.18 |