Command Injection

웹 애플리케이션이 외부 입력을 운영체제 명령어로 전달할 때, 입력값을 조작하여 공격자가 원하는 임의 명령어를 실행시키는 보안 취약점입니다.

시스템 명령어를 실행 할 수 있기에 리모트 코드 실행(RCE)의 한 종류라고도 할 수 있습니다.

공격자가 서버를 마음대로 할 수 있을 정도로 위험한 취약점입니다.

 

Command Injection이 발생하는 원인 

 

커맨드 인젝션은 주로 사용자 입력값을 검증하지 않고, 운영체제 명령어로 넘길 때 발생합니다.

구체적으로는 아래와 같은 이유들로 발생합니다.

  • 사용자의 입력을 과하게 신뢰하여 시스템 명령어에 직접 삽입할 때
  • 입력값에 대한 필터링이 없거나 부족할 때
  • 시스템 명령어를 사용하는 함수를 사용하여 입력값을 받을 때

위에서 말한 이유들 이외에도 여러가지 원인들이 있지만, 주로 검증 없이 외부 입력을 OS 명령어로 넘겼을 때 커맨드 인젝션이 발생한다고 요약할 수 있습니다.

 

Command Injection의 공격 흐름

  1. 웹 애플리케이션에서 공격자의 악의적인 입력을 받아들인다.
  2. 입력을 필터링 하지 못하여 그대로 시스템 명령어에 연결되거나 포함되어 서버가 실행한다.
  3. 서버의 운영체제가 명령어를 실행할 때, 입력값 안에 있던 추가 명령어가 같이 실행된다.
  4. 추가 명령어가 실행됨에 따라 공격자가 시스템 권한을 탈취하거나, 원하는 시스템 명령을 실행하게 된다.

Command Injection의 공격 방법

 

1. 명령어 구분자를 삽입하는 방법

  • 운영체제는 여러 명령어를 구분하여 실행할 수 있는 메타문자를 지원합니다.
  • 이를 활용하여 뒤에 악의적인 명령어를 추가하여 공격자가 원하는 명령어를 실행시킬 수 있습니다.
메타문자 설명
; 명령어 구분자
앞뒤 명령어를 순차적으로 실행
&& AND 실행
앞 명령어가 성공하면 뒤 명령어 실행
|| OR 실행
앞 명령이 실패하면 뒤 명령어 실행
` ` (백틱) 명령어 치환
백틱 안의 명령어가 먼저 실행되고, 그 값이 외부 명령어에 삽입됨. 
& 백그라운드 실행
&을 기준으로 앞 명령어는 백그라운드에서 실행되고,
뒤 명령어는 바로 실행됨.

 

2. 명령어 연결 또는 파라미터 조작

  • 명령어 구분자를 직접 입력하는 공격 기법 뿐만 아니라 원래 존재하는 명령어의 인자 부분을 조작하여 추가적인 명령어를 실행시키는 기법입니다.
  • 앞선 명령어의 정상적인 명령을 방해하지 않고, 은밀하게 추가 명령을 삽입하는 경우가 많습니다.
  • 메타 문자를 사용하는 경우도 많아 위 기법과 표면적으로는 비슷해 보이지만, 성격이 조금 다른 기법이라고 할 수 있습니다.

간단한 Command Injection 예시

ping [input] //input 부분에 사용자의 입력값이 들어갑니다.

8.8.8.8; whoami //이때 사용자(공격자)가 input에 이렇게 입력하면 서버에서는..

pint 8.8.8.8; whoami //이런 명령어가 실행됩니다. ping 명령어 이후에 whoami라는 명렁어가 추가로 실행되어 현재 사용자의 이름이 들어납니다.

 

Command Injection으로 가능한 행동

  • 커맨드 인젝션이 성공한다면 공격자는 서버내에 시스템 명령어 수준의 임이의 코드를 마음껏 사용할 수 있게됩니다.
  • 때문에 공격자는 거의 무제한에 가까운 권한을 얻게됩니다.
  • 간단한 예시는 다음과 같습니다.
가능한 공격 설명
시스템 정보 수집 whoami, hostname 등의 명령어 사용
파일 읽기/쓰기 cat /etc/passwd 등
백도어 설치 리버스 쉘 열기 (nc, bash 등)
서버 권한 탈취 root 권한으로 명령 실행
추가적인 공격 준비 내부망을 탐색하거나 다른 서버로 이동

 

 

'보안 > 이론 정리' 카테고리의 다른 글

웹 해킹 - Error Based SQL Injection  (0) 2025.07.08
HTTP 요청의 구조와 헤더의 역할  (0) 2025.07.07
웹 해킹 - SQL Injection  (0) 2025.04.29
웹 해킹 - CSRF  (0) 2025.04.24
웹 해킹 - XSS  (0) 2025.04.15

+ Recent posts