작업 환경
- VMware Workstation Pro (17.6.2 ver)
- Server
- Web 서버 : Rocky_Linux(8.10 ver, VMnet 2, PHP로 구성)
- DNS 서버 : Rocky_Linux(8.10 ver, VMnet 1)
- Client
- Kali Linux : Web 취약점 점검용 (VMnet 1)
- GNS 구성
- 해당 점검은 비밀번호 수정 페이지에 한해서 진행됨
SS (상) | 6. SSI 인젝션 |
취약점 개요 | |
점검 내용 | 웹페이지 내 SSI 인젝션 공격 가능성 점검 |
점검 목적 | 적절한 입력 값 검증 절차를 마련하여 악의적인 파일을 include 시키지 못하도록 하여 불법적인 데이터 접근을 차단하기 위함 |
보안 위협 | 해당 취약점이 존재할 경우 웹 서버 상에 있는 파일을 include 시켜 명령문이 실행되게 함으로 불법적으로 데이터에 접근할 수 있음 공통 SSI 구현은 외부의 파일을 Include 할 수 있는 명령어를 제공하며, 웹 서버의 CGI 환경 변수를 설정하고 출력할 수 있고,외부의 CGI 스크립트나 시스템 명령어들을 실행할 수 있으므로 사용자 입력 값에 대한 검증 로직을 추가로 구현하여야 함 |
판단 기준 |
양호 : 사용자 입력 값에 대한 검증이 이루어지는 경우 취약 : 사용자 입력 값에 대한 검증이 이루어지지 않는 경우 |
참고 | OWASP TOP 10 항목 중 A03 : Injection 에 해당한다고 판단 |
점검 방법
- Step 1) 사용자가 입력 가능한 파라미터 값에 <!--#echo var="DOCUMENT_ROOT" -->를 삽입하여 전송 후 반환되는 페이지에 사이트의 홈 디렉터리가 표시되는지 확인
- Step 2) 사용자가 입력 가능한 파라미터 값에 <!-- #exec cmd="ls -al" --> 를 삽입하여 전송 후 반환되는 페이지에 디렉터리의 파일 리스트가 표시되는지 확인
- Step 3) HTTP 요청(Request) 헤더에 명령어를 삽입하여 실행되는지 확인 (※ 예로 제시한 것으로, 웹 사이트 환경에 맞춰 점검하여야 함)
GET / HTTP/1.0
Referer: <!--#exec cmd="/bin/ps ax"-->
User-Agent: <!--#include virtual="/proc/version"-->
현 서버 구조에서는
1. 사용자의 입력을 .shtml 로 저장하지 않음
2. #include virtual 방식으로 .shtml 파일을 불러오지 않음
3. SSI 파서 없음
∴ 취약하지 않음
보안 설정 방법
- 사용자 입력으로 사용 가능한 문자들을 정해놓음
- 정해진 문자들을 제외한 나머지 모든 문자들을 필터링 함
- 필터링 해야 하는 대상은 GET 질의 문자열, POST 데이터, 쿠키, URL, 그리고 일반적으로 브라우저와 웹 서버가 주고받는 모든 데이터를 포함하며, 아래는 특수문자에 대한 Entity 형태를 표시한 것임
변경 전 | < | > | " | ( | ) | # | & |
변경 후 | < | > | " | ( | ) | # | & |
- 웹 서버의 SSI 기능을 사용하지 않거나, 웹 방화벽에 특수문자를 필터링하도록 룰셋 적용
참고
📌 SSI 란 ?
웹 서버가 .shtml 파일을 파싱할 때,
특수한 HTML 주석 태그로 작성된 서버 측 명령어를 실행하거나 변수 값을 삽입하는 기능
- SSI = Server Side Include
<!--#echo var="REMOTE_ADDR" -->
<!--#exec cmd="ls -al" -->
서버는 위 코드를 HTML로 해석하기 전에,
- 사용자의 IP 주소를 출력하거나
- 실제 서버 명령어(ls, id 등)를 실행한 결과를 삽입한다
📌 SSI 인젝션 이란 ?
공격자가 입력값에 SSI 구문을 삽입하고,
웹 서버가 이를 실수로 실행해서 명령 실행, 시스템 정보 노출, XSS 유발 등의 피해를 입는 취약점
<!--#exec cmd="whoami" -->
- 결과 페이지에 현재 서버의 사용자 계정(www-data, apache 등)이 표시됨
- 공격자가 명령 실행을 유도한 것
🔐 OWASP TOP 10(2021)과의 연관
1. A03: Injection
- 외부 입력이 코드나 명령으로 해석되어 실행
- PHP 자체는 이런 구조가 아니지만, PHP로 연동된 네이티브 애플리케이션이 존재할 경우 발생 가능
🛡️ 방어 방법
- SSI 비활성화 : Apache에서 Iptions - Includes 설정
- 사용자 입력 이스케이프 : htmlspecialchars() 처리
- .shtml 파일 사용 금지 : .php, .html 만 허용
- 출력 전에 검증 : <!--, #, exec 등 포함 여부 필터링
'주요정보통신기반시설가이드 > Web 취약점 점검' 카테고리의 다른 글
[DI (상)] 8. 디렉터리 인덱싱 (0) | 2025.05.12 |
---|---|
[XI (상)] 7. XPath 인젝션 (0) | 2025.05.12 |
[SI (상)] 5. SQL 인젝션 (0) | 2025.05.12 |
[OC (상)] 4. 운영체제 명령 실행 (2) | 2025.05.11 |
[LI (상)] 3. LDAP 인젝션 (0) | 2025.05.11 |