메인 화면입니다.

소스보기 입니다.

url을 확인해 보면 file의 파라미터로 hello가 전달되는 것으로 보아 hello.php를 호출하는 것으로 볼 수 있을 것 같습니다.

그럼 flag를 입력하여 flag.php를 호출하도록 해보도록하겠습니다.

파라미터로 "flag"를 입력하니 "FLAG is in the code"라는 문자열이 텍스트 박스에 표시되었습니다.

직접 "index.php, hello.php, flag.php"호출해보겠습니다.

[index.php]

[hello.php]

[flag.php]

여기서 알 수 있는 사실은 "index.php"는 화면을 구성해주는 역할을 하고 "hello.php", "flag.php"는 단순히 문자열만 표현해준다는 것을 확인 할 수 있습니다.

즉, "index.php"에서 "file"의 파라미터로 "hello", "flag"를 입력받아 "hello.php","flag.php"의 호출 결과를 "index.php"의 텍스트박스에 출력해주는 역할을 합니다.

이러한 역할을 해주는 함수가 있는데 바로 include()함수입니다.

[테스트]

저는 include 함수를 이용하여 위와 같은 상황을 구성하여 어떤 원리로 돌아가는지 테스트 해보았습니다.

PHP + Apache2 를 사용하였습니다.

[test1.php 화면]

[test2.php 화면]

문제와 거의 비슷하게 구성했습니다.

그럼 소스코드를 살펴보겠습니다.

[test1.php 소스코드]

page의 파라미터에 호출할 파일이름을 입력하면 include()함수를 통해 내용을 표시해줍니다.

예로 리눅스 "/etc/passwd" 문서를 호출해보겠습니다.

호출이 됩니다...

이번엔 test2.php 를 호출해보겠습니다.

잘 불러와지네요 ~

제가 테스트 한 소스에는 LFI라는 취약점이 있습니다.

LFI는 Local File Inclusion 의 약자로 공격대상 서버에 위치한 파일을 포함시켜 읽어오는 공격입니다.

php wrapper 중 "php://filter"를 이용하면 원하는 php파일의 소스코드를 읽어 올 수 있습니다.

자세한 내용은 [https://hakin9.org/web-application-penetration-testing-local-file-inclusion-lfi-testing/]여기를 참고하시면 될 것 같습니다.

여기서 "php://filter"를 사용하는 방법은 아래와 같습니다.

"php://filter/convert.base64-encode/resource=test2.php"

base64로 인코딩된 test2.php의 소스코드입니다.

이를 이용하여 webhacking.kr에서도 똑같이 적용해보겠습니다.

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

이제 인코딩된 문자열을 디코딩 해보겠습니다.

디코딩 결과 flag는 "FLAG{this_is_your_first_flag}"라는 것을 확인 할 수 있었습니다.

이제 Auth창가서 인증만 하면 됩니다.

[방어]

php.ini 설정

- allow_url_fopen = Off 로 설정한다

"allow_url_fopen"을 On으로 설정시 외부 싸이트의 파일을 호출할 수 있기 때문에 include(), require()계열 함수와 같이 사용시 보안에 취약합니다.

- allow_url_include = Off 로 설정한다

"allow_url_include"을 On으로 설정시 원격파일도 include가 가능하게 되므로 보안에 취약합니다.

이상 챌린지 25 성공!!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level27 (old)  (318) 2020.04.28
[webhacking.kr] Level26 (old)  (310) 2020.04.28
[webhacking.kr] Level24 (old)  (316) 2020.04.28
[webhacking.kr] Level23 (old)  (313) 2020.04.28
[webhacking.kr] Level22 (old)  (306) 2020.04.28

+ Recent posts