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소스가 불러와져 홈페이지에 출력된다.

- include 에 의해
/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{…} 플래그를 볼 수 있다.

- 디코딩 해보면, 서버 측 코드 부분에서 DH{…} 플래그를 볼 수 있다.
- (참고) Include 를 통해 불러온 PHP 파일의
<?php ... ?>코드는 실행되나 출력은 되지 않는다. - PHP WRAPPER로 BASE64 인코딩 처리하면 PHP 코드가 아닌 일반 텍스트처럼 인식되므로 소스코드 확인 가능하다.

🐛.. 🐛.. 🐛..