웹 보안 이론 4
LFI(Local File Inclusion) & RFI(Remote File Inclusion)
개념
- LFI
- 서버의 로컬 파일을 읽거나 실행할 수 있게 하는 취약점.
웹 애플리케이션의 취약한 파라미터에 악의적인 파일 경로를 삽입하여 악성 스크립트를 실행.
- RFI
- 웹 애플리케이션이 외부 URL을 포함할 수 있도록 허용하는 취약점.
- 공격자가 외부 URL에 있는 악성 파일을 삽입하고 실행.
공격 기법
- LFI
- 파일 경로 조작: 상대/절대 경로를 이용하여 민감한 파일 접근.
- 특수 문자 이용:
%00
(널 바이트) 등의 특수 문자를 이용해 필터링 우회. - PHP Wrapper 이용:
php://filter
를 활용하여 파일 내용을 Base64로 변환 후 출력.
- 로그 파일 Poisoning:
- 웹 서버 로그 파일에 악성 코드를 삽입한 후 실행.
- RFI
- 악성 URL 삽입: 취약한 파라미터에 공격자가 제어하는 외부 URL 삽입.
- 원격 파일 로드: 악성 스크립트가 포함된 외부 파일 실행.
우회 기법
- LFI
- 인코딩: URL 인코딩, 더블 URL 인코딩 등.
- 널 바이트: 파일 확장자 검증 우회.
- 경로 변형:
../
등을 사용해 상위 디렉토리로 이동. - 대체 문자:
..
,/
등을%2e
,%2f
로 대체.
- RFI
- DNS Rebinding: 방화벽 우회.
- URL Shortener: 악성 URL을 숨김.
- HTTP Request Smuggling: 방화벽이나 필터링 우회.
소스코드
- LFI 취약 코드
1
2
3
4
5
6
7
8
<?php
$file = $_GET['page'];
if (isset($file)) {
include($file . '.php');
} else {
include('home.php');
}
?>
- RFI 취약 코드
1
2
3
4
5
6
7
8
<?php
$page = $_GET['page'];
if(isset($page)){
include($page);
} else {
include('home.php');
}
?>
LFI VS RFI
항목 | LFI | RFI |
---|---|---|
목적 | 로컬 파일 읽기/실행 | 외부 URL에서 악성 파일 실행 |
공격 방식 | 업로드된 파일 포함 | 외부 서버의 악성 스크립트 실행 |
위험성 | 중요 정보 유출, Dos 공격 | 피싱 공격, 웹 사이트 변조 |
명령어 입력(Command Input) 공격
개념
- 웹 애플리케이션의 취약점을 이용해 공격자가 운영 체제 명령을 실행하는 공격 기법.
- 주로 사용자 요청을 처리하기 위해 시스템 명령어를 사용하는 경우 발생.
- 예시:
1 2
String fileName = request.getParameter("fileName"); Runtime.getRuntime().exec("ls -l " + fileName);
- 파일 업로드 기능에서 저장 경로를 지정하거나, 이미지 크기 조정 작업 등에 시스템 명령어를 사용하는 과정에서 악용 가능.
위험성
- 데이터 유출
- 공격자가 민감한 데이터를 탈취하여 악용.
- 예: 데이터베이스 정보, 사용자 계정 정보 등.
- 시스템 장악
- 서버의 권한을 탈취하여 운영 체제를 제어.
- 공격자는 임의의 명령 실행, 파일 삭제, 시스템 설정 변경 등을 수행.
- 서비스 마비
- 시스템 자원을 과도하게 소모하거나 주요 서비스를 중단시킴.
- 예: 서버의 디스크를 가득 채우는 공격.
- 악성코드 유포
- 서버를 통해 악성코드를 배포하여 추가 피해를 발생.
- 예: 웹 페이지 방문자를 대상으로 랜섬웨어 배포.
공격 기법
- HTTP 요청 파라미터
- URL 쿼리 문자열, POST 데이터, HTTP 헤더 등에서 악성 명령 삽입.
- 예:
1
http://example.com/upload?fileName=; rm -rf /
- 쿠키
- 쿠키 값에 악성 명령을 삽입하여 서버가 처리하는 시점에 실행.
- 예:
1
Set-Cookie: session=abc123; ls -al
- 파일 업로드
- 파일 이름 또는 파일 내용에 악의적 명령을 포함.
- 예:
1
evil.jpg; rm -rf /
- 외부 라이브러리
- 외부 라이브러리에서 사용자 입력 값을 검증하지 않고 처리.
- 예: 이미지 처리 라이브러리의 취약점을 이용해 명령 실행.
우회기법
- 특수문자 필터링 우회
- 필터링되지 않은 문자나 대체 문자를 사용하여 명령어 실행.
- 예:
|
,&
,;
- 명령어 연결
- 여러 명령을 연결하여 실행.
- 예:
1
ls -l; cat /etc/passwd
- 공백 우회
- 공백 대신
%20
이나\t
등 다른 문자를 사용. - 예:
1
cat%20/etc/passwd
- 공백 대신
- 이스케이프 시퀀스
- 이스케이프 문자를 사용하여 필터링을 우회.
- 예:
1
\; echo "hacked"
방어 방법
- 입력값 검증
- 사용자 입력값에서 명령어 관련 특수문자를 제거하거나 철저히 검증.
- 예: 필터링 및 인코딩.
- 화이트리스트 기반 접근
- 허용된 값만 처리하도록 정책 설정.
- 예: 파일 확장자 및 입력 데이터 제한.
- 외부 명령어 사용 제한
- 시스템 명령어 사용을 최소화하거나 안전한 대안 사용.
- 예: OS 명령 호출 대신 라이브러리 함수 사용.
- 권한 제한
- 시스템 명령을 실행하는 프로세스에 최소 권한 부여.
- 예: 특정 사용자 계정으로 명령 실행 제한.
- WAF(Web Application Firewall)
- 명령어 입력 공격 패턴을 탐지하고 차단.
- 예: 공격 시도 탐지 및 실시간 차단.
- 보안 로그 및 모니터링
- 서버 로그를 정기적으로 점검하여 이상 활동 탐지.
- 예: 비정상적인 명령 실행이나 파일 업로드 기록 확인.