처음 화면

URL을 자세히 보면 file 변수 값이 GET 방식으로 넘어간다는 것을 알 수 있고 file이라는 이름으로 전달된 파라미터 뒤에 .php가 자동으로 붙어 해당 내용을 회색 박스 내에 출력하고 있다.

 

file=index

 

file=flag

file에 flag를 넘겼을 때, FLAG is in the code라는 문자열이 보인다. code를 분석해야 한다.

파일 경로 취약점을 알아보기 위해서 ?file=../../../../../../etc/passwd 와 같이 입력해주었으나(LFI 공격)

이 ../ 명령어가 필터링이 되어 file=etc/passwd로 인식되어 해당 공격이 실패한다는 것을 알았다. 

 

 

이 이후로는 더 이상 해결방법을 모르겠어서 검색을 통해 이 문제에선 PHP wrapper를 이용한다는 정보를 알아냈다.

+) php가 버전 5 이상이 되면서 path 중간에 널바이트가 오면 주소를 더 이상 읽지 않는 취약점이 사라졌기 때문에 php wrapper를 사용하여 lfi 공격을 수행해야 하는 것이다.

 

◎ wrapper : 래퍼

래퍼는, 실제 데이터의 앞에서 어떤 틀을 잡아 주는 데이터 또는 다른 프로그램이 성공적으로 실행되도록 설정하는 프로그램이다.

php://filter wrapper
:: 다양한 I/O스트림을 다루는데 사용하는 wrapper 이다.
:: 사용자 입력과 같은 안전하지 않은 소스로부터의 데이타를 유효성 검사하여 필터링하는데 사용되는 방식이다.
이 wrapper를 사용할 때 우리는 encode/decode 옵션을 사용하여 서버 안에 존재하는 문서들을 열람할 수 있다.
ex) www.[우리가 공격할 웹 사이트의 주소].index.php?page=php://filter/convert.base64-encode/resource=/etc/passwd
처럼 활용할 수 있다.
위의 방식으로 공격을 진행하게 되면 우리는 base64 방식으로 인코딩 된 etc/passwd의 값을 얻을 수 있다.

출처 : https://opentutorials.org/module/4291/26819
참고 : https://www.php.net/manual/en/wrappers.php.php

 

http://webhacking.kr:10001/?file=flag

→ http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag

 

 

디코딩 결과

+ Recent posts