워게임/Root Me

[Root Me] PHP - Filters - 웹해킹 / LFI / PHP wrapper

SecurityMan 2022. 7. 18. 11:00

 

PHP Filters 와 관련된 웹해킹 문제

 

이전에도 실제 대회에서 비슷한 문제를 다뤄본 적이 있다.

(https://hackingstudypad.tistory.com/143)

 

문제의 목표는 admin의 비밀번호를 알아내는 것이다.

 

반응형

 

 

문제 페이지에 처음 접속하면 이런 화면이 나온다.

 

 

페이지 기능을 살펴보기 위해 일단 눈에 보이는 버튼을 눌러봤다.

 

home 버튼을 눌렀더니

 

URL에서 inc 변수로 accueil.php 페이지를 불러오는걸 볼 수 있었다.

 

 

두번째로 login 버튼을 눌러봤더니

 

이번에도 URL에서 inc 변수로 login.php 페이지를 불러오고 있었다.

 

 

inc 변수가 핵심인거 같아서

 

이번엔 inc 변수에 임의로 hello 라고 적어보았다.

 

그랬더니 에러가 나는데,

 

에러 내용을 살펴보면

 

서버에서 hello 라는 파일을 찾을수 없다는 것인데,

 

중요한건 서버측에서 include(hello) 이런식으로 include 함수를 사용해서 페이지를 불러온다는 것을 알 수 있었다.

 

PHP 에서 include 적절한 필터링 없이 함수를 사용할 경우

 

LFI(Local File Inclusion) 취약점이 발생한다.

 

LFI는 말 그대로 서버 내에 있는 파일을 불러와 읽을 수 있는 취약점이다.

 

일단 문제 제목에서 filter 라고 힌트를 줬으니 그걸 이용해본다.

 

 

inc 변수에

 

php://filter/convert.base64-encode/resource=login.php 라고 입력을 해본다.

 

php:// 를 PHP wrapper 라고 하는데 이걸 사용하면

 

filter 기능을 이용해서 인코딩을 할 수 있다.

 

login.php 파일을 읽어와서 base64로 인코딩한 뒤에 출력해라 정도로 해석하면 된다.

 

그러면 위처럼 base64로 인코딩된 내용이 출력되는것을 볼 수 있다.

 

 

CyberChef(https://gchq.github.io/CyberChef/) 에서 해당 내용을 base64 디코딩 해준다.

 

디코딩을 해보면 php 파일의 내용이 그대로 보이는데

 

아까는 있는지 몰랐던 config.php 파일이 있다는것을 알아낼 수 있다.

 

 

그렇다면 이번엔

 

php://filter/convert.base64-encode/resource=config.php 라고 입력해본다.

 

역시나 base64로 인코딩된 값이 출력되고

 

 

디코딩을 해보면 admin의 비밀번호를 알아낼 수 있다.

반응형