작업 환경

  • 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 형태를 표시한 것임
변경 전 < > " ( ) # &
변경 후 &lt; &gt; &quot; &#40 &#41 &#35 &amp
  • 웹 서버의 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로 연동된 네이티브 애플리케이션이 존재할 경우 발생 가능

 

 

🛡️ 방어 방법

  1. SSI 비활성화 : Apache에서 Iptions - Includes 설정
  2. 사용자 입력 이스케이프 : htmlspecialchars() 처리
  3. .shtml 파일 사용 금지 : .php, .html 만 허용
  4. 출력 전에 검증 : <!--, #, exec 등 포함 여부 필터링