PHP php://filter

agnusdei·2025년 8월 3일

CTF

목록 보기
56/185

PHP php://filter 기반 LFI → RCE 공격 시나리오는 매우 실전적인 케이스입니다. 위에서 실행한 명령어와 공격 흐름을 정리해주면 시험 또는 실무 보고서에서도 응용할 수 있습니다. 아래에 정리해드릴게요.

💥 공격 개요: PHP php://filter 체인을 이용한 파일 업로드 없는 RCE

🧠 기본 개념
• php://filter: PHP의 스트림 래퍼(stream wrapper) 중 하나로, 파일을 읽을 때 다양한 필터를 적용할 수 있게 해줌.
• LFI (Local File Inclusion): include($_GET['file']) 같은 코드에서 외부 입력으로 파일 경로가 조작될 수 있을 때 발생.
• 필터 체인(Filter Chain): php://filter/convert.iconv.*|convert.base64-encode|... 형식으로 여러 필터를 연결해 문자열을 조작.

🧪 공격 시나리오
1. 취약한 코드

2.	공격자 준비
•	공격자는 실행시키고 싶은 PHP 코드를 준비:
•	이 코드를 php_filter_chain_generator.py로 필터 체인으로 변환:

python3 php_filter_chain_generator.py --chain ''

3.	생성된 결과 사용
•	생성된 필터 체인을 LFI 취약점에 삽입:

curl http://victim.com/vuln.php?file=php://filter/convert.iconv.ENCODING...|convert.base64-decode

4.	동작 방식
•	php://filter는 필터를 순서대로 적용하여 원래의 페이로드를 복원
•	마지막에 PHP 엔진이 이를 실행 → 원격 코드 실행 (RCE)

🔧 왜 업로드 없이 가능한가?
• 보통 RCE는 웹 셸 업로드 → 접근 방식이지만,
• 여기서는 include() 함수 자체가 파일을 읽고 실행하기 때문에,
• 필터 체인을 통해 메모리 내에서 페이로드를 복원하고 실행할 수 있음.
• 즉, 파일 시스템 접근 없이도 코드 실행 가능

🧩 실전 팁 (OSCP 스타일 정리)

항목 설명
취약점 LFI with PHP include
조건 include($_GET['file']) 형태의 취약한 PHP 코드
무기 php://filter, iconv, base64
페이로드 전달 방식 URL 파라미터로 전달
업로드 필요 여부 ❌ 없음
우회 기법 인코딩 체인으로 WAF 탐지 우회 가능
결과 RCE, Reverse Shell 연결

🧒 어린이 요약

PHP에서 파일 읽는 기능이 약간 허술하면, 필터를 이용해 내가 짠 코드를 몰래 실행시킬 수 있어요. 파일도 안 올려도 되고, 서버가 그냥 알아서 실행해줘요. 그래서 조심해야 해요.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글