취약점 분석


flag 파일이 어디있는지는 알 수 있다.
문제는 어떻게 PHP 소스코드를 유출시키는가다.
- php://filter로 소스가 보이면 → LFI(로컬 파일 포함/읽기) 취약점. 추가로 index.php 같은 파일을 읽어 앱의 동작/필터 규칙을 파악할 수 있음
http://webhacking.kr:10001/?file=file:///var/www/html/flag나 http://webhacking.kr:10001/../../../../var/www/html/flag 등의 방법으로는 불가능하다.
Path Traversal은 안 먹힌다는 것
⇒ 남은 방법은 LFI밖에 없다.
익스플로잇
Payload
http://webhacking.kr:10001/?file=php://filter/convert.base64-encode/resource=flag

Base64 디코딩

PHP Filters Chain
정의 : PHP Filters Chain 이란 PHP에 존재하는 Wapper과 Conversion Filter들을 활용해 임의의 코드 조각 또는 String을 생성하는 방법
PHP Wappers
PHP Wapper은 fopen(), copy(), file_exists() 그리고 filesize()와 같은 함수들을 지원하기 위해 존재하는 URL-Style Protocol입니다.
PHP Wapper에는 다음과 같은 종류가 존재
- file:// -- 파일 시스템에 접근할 때 사용
- http:// -- HTTP(s) URL에 접근할 때 사용
- ftp:// -- FTP(s) URL에 접근할 때 사용
- php:// -- PHP에서 사용되는 다양한 I/O에 접근할 때 사용
- zlib:// -- 파일을 압축할 때 사용됩니다.
- data:// -- 필요한 resource를 inline으로 삽입할 때 사용
- glob:// -- 패턴 매칭을 통해 파일의 경로들을 찾을 때 사용
- phar:// -- phar 확장자 를 지원하는 wapper
- ssh2:// -- SSL 연결을 지원할 때 사용(기본 제공 확장이 아님)
- rar:// -- rar 압축 파일의 내용을 읽고, 압축 해제된 파일을 다룰 때 사용(기본 제공 확장이 아님)
- ogg:// -- 오디오 데이터를 접근 할 때 사용( 기본 제공 확장이 아님 )
- expect:// -- stdio, stdout, stderr에 접근 할 때 사용(기본 제공 확장이 아님)
PHP 소스 코드 유출
- 하지만 앞서 살펴본 것처럼 PHP 파일 스트림을 직접 include 하면 PHP 코드가 실행되어 렌더링된 결과만 확인할 수 있고 실제 소스 코드는 확인할 수 없다.
- 이러한 문제를 해결하기 위해 php://filter 래퍼의 Base64 인코딩 필터를 사용하면 PHP 코드가 실행되지 않고 소스 코드를 확인할 수 있다.
즉, resource 에 전달된 index.php 가 convert.base64-encode 필터에 의해 처리되어 Base64로 인코딩된 문자열이 출력되는 것을 확인할 수 있으며, 이 Base64 문자열을 디코딩하면 index.php의 소스 코드를 확인할 수 있다.
존재하지 않는 resource 우회
php://filter 동작 방식을 보면 resource 매개변수로 지정된 스트림을 가져와 필터에 의해 처리되는 과정을 확인할 수 있다.
'Webhacking.kr' 카테고리의 다른 글
| old-21 (0) | 2026.05.14 |
|---|---|
| old-32 (0) | 2026.05.13 |
| old-50 (0) | 2026.05.13 |
| old-43 RevengE (0) | 2026.05.13 |
| baby toctou(Race Condition) (0) | 2026.05.12 |