Warning: mkdir(): Permission denied in /var/www/html/file/double_extension.php on line 15
SecuLab | Double Extension Bypass Lab
← 대시보드 Double Extension Bypass SecuLab PRAC

📄 Double Extension Bypass

다중 확장자 검증 우회 실습

OWASP A04 · Insecure Design
취약 포인트: 이 서버는 pathinfo($name, PATHINFO_EXTENSION)마지막 확장자만 검사합니다.
shell.php.jpg → 마지막 확장자 jpg → 차단 목록에 없으므로 통과!

목표: shell.php.jpg 처럼 다중 확장자 파일명을 이용해 웹쉘 업로드에 성공하세요.
업로드된 파일은 Apache 설정에 따라 .php로 실행될 수 있습니다.
선택된 파일 없음

💡 힌트 보기 (클릭) ▾
# 서버의 검증 로직 (취약) $ext = strtolower(pathinfo('shell.php.jpg', PATHINFO_EXTENSION)); // → $ext = 'jpg' ← php가 아니므로 통과! ─────────────────────────────────────── # 우회 가능한 파일명 예시 shell.php.jpg ← 가장 기본적인 형태 shell.php.png ← png로 위장 shell.php5.jpg ← 중간에 php5 삽입 shell.phtml.gif ← phtml은 php로 실행됨 ─────────────────────────────────────── # curl 업로드 예시 curl -X POST http://localhost:8081/double_extension.php \ -F "file=@shell.php;filename=shell.php.jpg"

🔍 검증 방식 비교

검증 방식 예시 코드 안전성
마지막 확장자만 검사 pathinfo($name, PATHINFO_EXTENSION) 취약 — 다중확장자 우회 가능
파일명 전체에서 위험 확장자 탐색 preg_match('/\.(php|phtml)/i', $name) 안전 — 중간 확장자도 탐지
저장 시 확장자 강제 변경 $dest = $uploadDir . uniqid() . '.jpg' 안전 — 파일명 자체를 신뢰하지 않음
업로드 디렉토리 PHP 실행 차단 php_flag engine off (.htaccess) 안전 — 실행 자체를 막음

📂 업로드된 파일 목록

업로드된 파일이 없습니다.