반응형
문제분석 & 풀이
ls -al 실행 결과가 화면에 출력됐다.
file 파라미터로 파일명을 전송하고 실행결과를 출력한다.
[그림]은 hello.php를 실행한 결과다.
파일 중에는 flag.php가 있고 file 파라미터로 flag를 전송했다.
"FLAG is in the code"라고 나온다.
flag는 flag.php 코드로 정의된 것 같다.
그렇다면 flag.php의 실행결과가 아닌 코드를 봐야한다.
include("{$file}.php")
문제에서 위와 같이 include한다고 판단할 수 있다.
LFI를 시도해서 flag.php에 접근할 수는 있지만 flag.php를 실행한 결과만 출력될 뿐이고 코드를 볼 수는 없다.
그렇다면 어떻게 해야 flag.php 코드를 볼 수 있을까?
→ PHP wrapper를 이용하면 된다.
https://keyme2003.tistory.com/entry/dreamhack-php-1
php wrapper와 관련된 설명은 위 링크를 참고하자.
결론적으로 php://filter를 이용하면 flag.php 코드를 확인할 수 있다.
/?file=php://filter/convert.base64-encode/resource=flag
payload는 위와 같이 구성했다.
flag.php 파일의 내용을 base64 인코딩 데이터로 로드하는 payload다.
PD9waHAKICBlY2hvICJGTEFHIGlzIGluIHRoZSBjb2RlIjsKICAkZmxhZyA9ICJGTEFHe3RoaXNfaXNfeW91cl9maXJzdF9mbGFnfSI7Cj8+Cg==
전송하면 위와 같이 base64 인코딩 데이터가 나온다.
<?php
echo "FLAG is in the code";
$flag = "FLAG{fake_flag}";
?>
인코딩 데이터를 디코딩하면, flag.php 코드가 출력된다.
flag를 획득할 수 있다.(위에 작성한 $flag는 필자가 수정한 가짜 flag다.)
반응형