특징
악의적인 사용자가 애플리케이션이 실행 중인 시스템 명령어를 변경하거나 실행할 수 있도록 하는 취약점
공격자는 애플리케이션이 외부 입력을 받아 시스템 명령을 실행할 때, 그 입력을 악용하여 의도치 않은 명령을 삽입
애플리케이션이 사용자의 입력을 적절하게 검증하거나 필터링하지 않을 때 발생
공격자가 시스템 명령어에 대한 직접적인 접근 권한을 얻으면, 데이터 탈취, 시스템 손상, 권한 상승 등의 심각한 보안 위협이 발생
DVWA 실습
Low 보안레벨에서 실습을 진행
- Ping 명령어를 수행하는 페이지
- 일반적인 페이지 이용법은 ip를 입력하고 제출
- 특수문자를 사용해 공격 시도
명령어 | 설명 |
; 세미콜론 | 하나의 라인에 입력된 명령어들을 성공, 실패와 관계 없이 모두 실행 |
& 엠퍼센트 | 엠퍼센트로 명령어를 구분하여 앞의 명령어는 백그라운드로 실행하고, 즉시 뒤의 명령어를 실행 앞 명령어의 성공 여부와 관계 없이 뒤 명령어는 실행 |
&& 더블 엠퍼센트 | 앞에 입력된 명령어가 실패하면 뒤에 있는 명령어를 실행하지 않음 |
| 버티컬바 | 앞에 입력된 명령어의 실행 결과를 뒤 명령어의 입력으로 넘겨줌 |
|| 더블 버티컬바 | 앞에 입력된 명령어가 성공하면 뒤에 있는 명령어는 실행되지 않음 |
- 공격에 자주 이용되는 특수문자
- IP와 함께 세미콜론(;)을 뒤쪽에 입력하여 다중 명령을 사용한다는 구문 사용
- 시스템 정보를 확인하는 명령어를 추가적으로 입력한 결과 Command Injection 공격에 성공하여 시스템 정보가 추가적으로 출력
소스코드 분석
- 소스코드를 살펴보면 ip를 입력하면 ping 명령어를 수행하도록 되어 있음
- 입력된 값을 검증없이 그대로 사용하는 구조이기 때문에 ping 명령어의 뒤를 이어 다중 명령어를 입력할 수 있는 특수문자를 사용가능
대응방안
- 입력 검증 (Input Validation)
- 화이트리스트 사용: 사용자가 입력할 수 있는 값의 범위를 제한하는 화이트리스트 방식을 사용
- 정규 표현식 사용: 입력값을 정규 표현식을 통해 검증하여 특정 형식만 허용
- 명령어 실행시 외부 입력 제어
- 파라미터화된 시스템 호출: 명령어와 입력값을 분리하여 전달해 명령어 주입을 방지
- PHP의 네이티브 함수나 API를 사용 : 사용자의 입력값을 시스템 명령어로 전달하기 전에 escapeshellarg() 또는 escapeshellcmd() 함수를 사용하여 특수 문자를 제거하거나 escape 처리
- 시스템 명령어 실행 피하기: exec(), shell_exec(), system()과 같은 함수를 사용하지 않는 것이 안전
- 최소 권한 원칙 적용
- 애플리케이션 권한 제한: 웹 애플리케이션이 실행되는 계정은 최소한의 권한만 가지도록 설정
'CERT' 카테고리의 다른 글
웹 모의해킹: CSRF (2) | 2024.10.05 |
---|---|
웹 모의해킹: Brute Force (0) | 2024.10.05 |
웹 해킹 실습 환경 구성 (3) | 2024.10.05 |
Proxy 프록시 (0) | 2024.08.16 |
웹취약점: 권한인증 취약점 (0) | 2024.08.16 |