피드로 돌아가기
my-cool-blog - jerseyctf6
Dev.toDev.to
Security

LFI 및 PHP Filter Wrapper를 통한 PostgreSQL 자격 증명 탈취 및 데이터 유출

my-cool-blog - jerseyctf6

David Disu2026년 4월 19일2intermediate

Context

사용자 입력값을 file_get_contents() 함수에 직접 전달하는 취약한 파일 처리 구조 설계. 불충분한 입력값 검증으로 인해 Directory Traversal 및 Local File Inclusion(LFI) 공격에 노출된 아키텍처.

Technical Solution

  • php://filter wrapper를 활용한 소스 코드 Base64 인코딩 추출로 서버 측 실행 방지 및 내부 로직 분석
  • includes 디렉토리 접근 제한 및 pg_connect 문자열 필터링을 수행하는 보안 로직 확인
  • PHP Filter Wrapper의 인코딩 특성을 이용하여 메모리 상의 데이터 형태를 변환함으로써 str_contains 기반의 콘텐츠 필터링 우회
  • Directory Traversal 경로 조작을 통한 /etc/passwdincludes/db.inc 파일 접근 권한 획득
  • 외부로 노출된 PostgreSQL 포트(5432)와 탈취한 DB 자격 증명을 결합한 직접적인 데이터베이스 쿼리 수행

- 사용자 입력 기반 파일 경로 지정 시 화이트리스트 기반의 경로 검증 로직 적용 - `php://filter`와 같은 위험한 PHP Wrapper 사용 제한 및 `allow_url_include` 설정 비활성화 - 데이터베이스 포트의 외부 노출을 차단하고 VPC 내 Private Subnet 배치 및 Security Group 설정 강화 - Security through Obscurity 방식의 문자열 치환/인코딩 필터링 대신 구조적인 입력값 검증 프레임워크 도입

원문 읽기