이 문서에 포함된 어떠한 내용도 불법적이거나 비윤리적인 목적으로 보안 도구나 방법론을 사용하도록 가르치거나 장려하지 않습니다. 항상 책임감 있는 태도로 행동하세요. 여기에 설명된 도구나 기법을 사용하기 전에 개인 테스트 환경 또는 허가를 받았는지 확인하세요. |
[ 환경 ]
DVWA | v1.9 |
Burp Suite | Community Edition v2024.11.2 |
명령어 삽입 (Command Injection)은 사용자 입력값을 시스템 명령어로 전달하는 과정에서 발생하는 보안 취약점으로, 공격자가 시스템에 임의의 명령을 실행할 수 있게 한다. 이로 인해 데이터 유출, 시스템 장악, 서비스 중단 등 심각한 피해를 초래할 수 있다.
명령어 삽입은 애플리케이션이 사용자 입력값을 시스템 명령어에 직접 포함하여 실행할 때 발생한다. 개발자가 입력값 검증을 충분히 하지 않거나, 시스템 명령어와 사용자 입력값의 경계를 분리하지 못할 때 공격자가 이를 악용할 수 있다.
명령어 삽입 취약점이 발생하는 어떻게 발생하는지 이해하기 전에 운영 체제 셸에서 명령어가 실행되는 기본 원리를 이해해 보겠다. [그림 1]을 보면 두 개 이상의 두 개 이상의 명령을 동시에 실행할 때마다 &&, ||, ;, 등을 사용한다는 것을 알 수 있다. 따라서 두 개 이상의 OS 명령이 있는 경우 왼쪽에서 오른쪽으로 순서대로 실행된다. 또한 시퀀스의 명령이 실패해도 다른 명령의 실행이 중단되지 않다. 이 명령어의 연결 기능은 웹 애플리케이션에서 제대로 구현되지 않은 경우 주로 OS 명령 인젝션의 원인이 된다.
명령어 삽입 (Command Injection) 예제
ㅁ 기본 예제 : 쉘 명령어 호출
# 취약한 코드
import os
user_input = input("파일명을 입력하세요: ") # 사용자 입력
os.system(f"cat {user_input}") # 입력값을 시스템 명령에 삽입
ㅁ 웹 애플리케이션에서의 예제
// PHP 취약 코드
$ip = $_GET['ip']; // 사용자 입력
exec("ping $ip"); // 입력값을 시스템 명령에 포함
입력값 검증 부족
취약한 명령어 실행 로직
보안 경계 분리 실패
외부 입력값 사용
기본 명령어 확장
파이프(|) 및 리다렉션(>) 사용
백도어 설치
사용자 입력 검증
명령어 실행 제한
입력값 이스케이프 처리
최소 권한 원칙 적용
애플리케이션 설계 개선
로그 및 모니터링
Command Injection은 잘못된 사용자 입력 처리로 발생하는 심각한 보안 취약점으로, 공격자는 이를 통해 서버의 제어권을 얻거나 데이터를 유출할 수 있다. 입력값 검증, 명령어 실행 제한, 최소 권한 적용 등 다층적인 보안 방식을 적용해 이러한 취약점을 방지해야한다. 안전한 코드 작성 습관과 정기적인 보안 점검은 Command Injection의 위험을 최소화하는 데 필수적이다.
$target = $_REQUEST[ 'ip' ];
if( stristr( php_uname( 's' ), 'Windows NT' ) ) {
$cmd = shell_exec( 'ping ' . $target );
} else {
$cmd = shell_exec( 'ping -c 4 ' . $target );
}
echo "<pre>{$cmd}</pre>";
소스코드에서 확인하였듯이 $target = $_REQUEST[ 'ip' ]; 로 target 변수에 입력한 IP를 대입하며, shell_exec( ) 함수는 $target 에서 입력한 IP를 이용해서 Ping 실행한다는 것을 확인하였다. 애플리케이션이 명령어 삽입 취약점에 취약한 경우, Injection된 OS 명령어가 실행된다. 입력 필드에 127.0.0.1; cat /etc/passwd를 삽입하는 경우 명령어가 잘 실행되어, /etc/passwd 파일의 내용을 확인할 수 있다.
DVWA : Command Injection - High level (0) | 2024.12.29 |
---|---|
DVWA : Command Injection - Medium level (0) | 2024.12.29 |
DVWA : Brute Force - Impossible level (0) | 2024.12.29 |
DVWA : Brute Force - High level (0) | 2024.12.29 |
DVWA : Brute Force - Medium level (0) | 2024.12.28 |