특징

악의적인 사용자가 애플리케이션이 실행 중인 시스템 명령어를 변경하거나 실행할 수 있도록 하는 취약점

공격자는 애플리케이션이 외부 입력을 받아 시스템 명령을 실행할 때, 그 입력을 악용하여 의도치 않은 명령을 삽입

 

애플리케이션이 사용자의 입력을 적절하게 검증하거나 필터링하지 않을 때 발생

공격자가 시스템 명령어에 대한 직접적인 접근 권한을 얻으면, 데이터 탈취, 시스템 손상, 권한 상승 등의 심각한 보안 위협이 발생

 

DVWA 실습

Low 보안레벨에서 실습을 진행

 

  • Ping 명령어를 수행하는 페이지
  • 일반적인 페이지 이용법은 ip를 입력하고 제출

 

  • 특수문자를 사용해 공격 시도
명령어 설명
; 세미콜론 하나의 라인에 입력된 명령어들을 성공, 실패와 관계 없이 모두 실행
& 엠퍼센트 엠퍼센트로 명령어를 구분하여 앞의 명령어는 백그라운드로 실행하고, 즉시 뒤의 명령어를 실행 앞 명령어의 성공 여부와 관계 없이 뒤 명령어는 실행
&& 더블 엠퍼센트 앞에 입력된 명령어가 실패하면 뒤에 있는 명령어를 실행하지 않음
| 버티컬바 앞에 입력된 명령어의 실행 결과를 뒤 명령어의 입력으로 넘겨줌
|| 더블 버티컬바 앞에 입력된 명령어가 성공하면 뒤에 있는 명령어는 실행되지 않음
  • 공격에 자주 이용되는 특수문자

  • IP와 함께 세미콜론(;)을 뒤쪽에 입력하여 다중 명령을 사용한다는 구문 사용
  • 시스템 정보를 확인하는 명령어를 추가적으로 입력한 결과 Command Injection 공격에 성공하여 시스템 정보가 추가적으로 출력

소스코드 분석                                                         

  • 소스코드를 살펴보면 ip를 입력하면 ping 명령어를 수행하도록 되어 있음
  • 입력된 값을 검증없이 그대로 사용하는 구조이기 때문에 ping 명령어의 뒤를 이어 다중 명령어를 입력할 수 있는 특수문자를 사용가능

대응방안

  1. 입력 검증 (Input Validation)
    • 화이트리스트 사용: 사용자가 입력할 수 있는 값의 범위를 제한하는 화이트리스트 방식을 사용
    • 정규 표현식 사용: 입력값을 정규 표현식을 통해 검증하여 특정 형식만 허용
  2. 명령어 실행시 외부 입력 제어
    • 파라미터화된 시스템 호출: 명령어와 입력값을 분리하여 전달해 명령어 주입을 방지
    • PHP의 네이티브 함수나 API를 사용 : 사용자의 입력값을 시스템 명령어로 전달하기 전에 escapeshellarg() 또는 escapeshellcmd() 함수를 사용하여 특수 문자를 제거하거나 escape 처리
    • 시스템 명령어 실행 피하기: exec(), shell_exec(), system()과 같은 함수를 사용하지 않는 것이 안전
  3. 최소 권한 원칙 적용
    • 애플리케이션 권한 제한: 웹 애플리케이션이 실행되는 계정은 최소한의 권한만 가지도록 설정

'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

+ Recent posts