-
<Webhacking.kr> old-25Wargame/Webhacking.kr 2021. 12. 19. 01:45
위 내용은 리눅스에서 "ls -l"을 사용한 것으로 보인다.
URL Query에 "?file=hello"으로 보아 GET 방식으로 파일명을 전달하는 것 같다.
URL Query에 "?file=flag"을 입력하면
FLAG가 코드 안에 있다는 메시지를 출력한다.
php 코드는 서버 내에 저장되어 있다. 이런 경우 "LFI vulnerability" 기법을 수행할 수 있다.
LFI(Local File Inclusion) 취약점은 파일이 공격 대상의 서버에 위치할 때 사용할 수 있는 방법이다.
해당 취약점은 php로 만들어진 웹 사이트에서 include, require, fopen 등의 함수를 사용해 받아온 입력값을 경로에 추가하기 때문에 발생한다.
PHP 버전 5 전에는 경로 값에 NULL Byte를 추가하는 NULL Byte Injection을 시도해서 LFI 취약점을 공격했지만, PHP 버전 5 이후로는 PHP wrapper를 이용해야 한다.
PHP wrapper는 개발자들이 사용하는 도구로, 여러 종류가 있다.
https://www.php.net/manual/en/wrappers.php
이 중 LFI 공격을 하면서 유용하게 쓰이는 wrapper는 expect://, php://filter, zip://이 있다.
expect://
expect:// wrapper의 경우, system command를 실행한다. expect://ls를 통해 system command를 살펴볼 수 있다.
php://filter
php://filter의 경우, 서버 내부의 파일을 볼 수 있다.
zip://
zip://의 경우, zip 파일의 압축을 풀고, 압축을 푼 파일 안에 있는 코드를 실행한다.
따라서, 이 문제에서는 PHP://filter를 사용한다.
PHP://filter wrapper는 encode/decode 옵션을 사용하여 서버 내의 파일을 볼 수 있다.
ex) www.[공격할 웹 사이트의 주소]/?file=php://filter/convert.base64-encode/resource=[파일이름]
위 URL을 통해 파일의 내용을 base64 형식으로 암호화된 상태로 볼 수 있다.
flag.php안에 FLAG가 들어있다고 했으므로, flag.php의 파일을 읽어야 한다.
따라서 "http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag" 를 입력하면
convert.base64-encode를 통해 base64로 인코딩했으니, 이 값을 base64로 디코딩해보면
<?php echo "FLAG is in the code"; $flag = "FLAG{this_is_your_first_flag}"; ?>
위와 같은 PHP 구문이 나타나고, flag 값을 확인할 수 있다.
이 flag 값을 Webhacking 사이트의 Auth 페이지에 입력하면
문제를 해결할 수 있다.
'Wargame > Webhacking.kr' 카테고리의 다른 글
<Webhacking.kr> old-28 (0) 2021.12.25 <Webhacking.kr> old-29 (0) 2021.12.21 <Webhacking.kr> old-33 (0) 2021.12.15 <Webhacking.kr> old-26 (0) 2021.12.12 <Webhacking.kr> old-27 (0) 2021.12.12