출처 : unika

Command Injection

  • 애플리케이션이 시스템 명령어를 실행하는 과정에서, 외부 입력값이 적절히 검증되지 않아 공격자가 임의의 시스템 명령어를 삽입·실행할 수 있는 취약점이다.
  • 주로 웹 애플리케이션에서 { system, exec 등 } os 명령어 호출 함수를 사용할 때 발생한다.
  • 공격자는 이를 통해 1) 시스템 명령어를 조작하거나 2) 민감 정보 탈취 및 3) 시스템 제어권 획득을 시도할 수 있다.

특징

  • Linux / Windows 명령어 방식에 따라 공격 방식이 다르다.
  • 합법적인 명령어와 혼용되어 탐지가 어렵다.
  • URL, 폼 입력값, HTTP 헤더, API 등 입력 경로가 다양하다.

실습

실습 시작 화면

가장 먼저 Command Injection 실습 페이지 동작을 확인한다.

해당 페이지는 입력한 IP 주소로 ping을 전송하여 네트워크 연결 여부를 확인하도록 동작한다.

 

1. 정상 동작 확인

IP 주소만 입력 시 : 정상 동작

 

2. OS 명령어 입력 

OS 명령어 입력 시 : 'you are hacked :d' 문자 출력


대응 방법

  1. Whitelist 방식으로 사용 가능한 문자와 문자열을 지정한다.
  2. Blacklist 방식으로 & | ; $ > < ` \ ! 등의 특수 문자를 검열한다.
  3. 사용자에게 작업을 위해 필요한 권한만 부여한다. "최소 권한의 원칙"
  4. WAF 적용

출처 : StrongDM

Brute Force

  • 가능한 모든 조합의 ID/PW 입력 시도를 자동화하여 인증을 우회하거나 시스템 접근 권한을 얻으려는 공격 방식이다.
  • 자동화 도구를 사용하여 빠르게 대량으로 시도할 수 있어 단순하고, 효과적이다.

특징

  • 자동화 도구를 사용하여 수천에서 수백만 번 시도가 가능하다.
  • 인증 시스템을 무력화하여 내부 시스템에 접근한다.
  • 반복적인 로그인 실패가 로그로 남아 이를 추적할 수 있다.

실습

실습 시작 화면

 

1. BurpSuite(Proxy) > 웹페이지 로그인 동작을 Intruder로 전송

BurpSuite, 로그인 HTTP 동작을 Intruder로 전송

 

2. BurpSuite(Intruder) > 로그인 HTML의 password에 준비된 비밀번호 목록 불러오기

  1. 로그인 전송 HTTP 요청에서 모든 변수 요인에 대해 'Clear$'을 실행한다.
  2. 그리고 비밀번호 항목에만 'Add$'을 적용한다.
  3. Payloads의 payload configuration에서 Load 를 누르고 /usr/share/john 의 password.list를 등록한다.
  4. 'Start Attack' (이모티콘)

 

3. 결과 비교

시도한 비밀번호 결과(Length) 비교

 

시도 결과를 확인하면 Length 값이 다른 값과 다르게 두드러지는 항목이 존재한다.

 

BurpSuite의 Comparator를 사용하여 HTTP response 결과값을 비교하였다.

BurpSuite Comparator 비교 결과

'password'가 비밀번호였다.

Command Injection 성공 화면


대응 방법

  1. 일정 횟수 이상 실패 시 계정을 일시적으로 잠군다.
  2. 자동화 공격에 대응하기 위해 CAPTCHA를 적용한다.
  3. OTP, SMS 인증 등 2차 인증을 추가한다.
  4. WAF 적용

참고 자료

 - 36주차 과제 (하) - Brute Force 공격, Command Injection 공격 (LOW)

 

추가 실습 자료

 - How to Brute Force Attack on Web Forms? [Step-by-Step]

 - AWS WAF DVWA 실습