워게임/Root Me

[Root Me] Local File Inclusion - Double encoding - 웹해킹 / LFI / PHP wrapper

SecurityMan 2022. 8. 29. 11:00

 

두번째 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 인코딩/디코딩 해주는 사이트를 이용해 확인해보면

(https://www.urldecoder.org/)

 

. 을 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 디코딩을 해주면

 

플래그를 찾을 수 있다.

반응형