php-1


소스코드 분석

index.php

  • /?page={사용자 입력 값}
    • 사용자 입력 값이 존재하면, {사용자 입력 값}.php 파일을 불러오는 구조다.
    • (include - 절대 경로만 지원하며, 항상 루트 부터 주소를 불러온다.)

list.php

  • ../uploads/ 폴더를 스캔하여, .., ., index.html 파일을 제외한 파일들에 대한 링크들을 출력한다.
    • /?page=view&file={$directory}{$value}

view.php

  • list.php에서 넘어온 {$directory}{$value} 값에 “flag” 문자열이 존재하면 플래그 확인이 불가했다.

  • /page=list 경로로 접근하면 flag.txt 파일을 확인할 수 있는데, 접근하면 “Permission denied” 메시지 발생한다.

  • 다시 index.php 파일을 살펴보면, {사용자 입력 값}.php 파일 자원을 반환해주는 로직을 확인할 수 있다.
    • include 에 의해 {사용자 입력 값}.php 소스가 불러와져 홈페이지에 출력된다.

  • /index.php?page=../uploads/flag를 입력하면 “Can you see $flag?” 문자열이 출력된다.
  • 문자열이 반환되고 있으므로 ../uploads/flag.php 파일은 정상적으로 불린 것으로 보인다.

  • GET 요청 시 전달된 파라미터는 index.php 파일에서 Include로 특정 파일을 불러올 때 사용된다.
  • PHP Wrapper를 사용하면 BASE64 인코딩 된 /var/www/uploads/flag.php 소스를 확인할 수 있다.
    • 디코딩 해보면, 서버 측 코드 부분에서 DH{…} 플래그를 볼 수 있다.

  • (참고) Include 를 통해 불러온 PHP 파일의 <?php ... ?> 코드는 실행되나 출력은 되지 않는다.
  • PHP WRAPPER로 BASE64 인코딩 처리하면 PHP 코드가 아닌 일반 텍스트처럼 인식되므로 소스코드 확인 가능하다.

🐛.. 🐛.. 🐛..


REFERENCE

  1. https://jay-jeon.tistory.com/15
  2. https://www.dottak.me/1964af8a-50ca-800b-9c3f-da340bfa9b5d