본문 바로가기

해킹과 보안 동향/DVWA

dvwa. 커맨드인젝션 공격#2-1(low)

728x90

 

커맨드 인젝션 공격(command injection)이란?

 : 말그대로 취약한 운영체제에서 임의의 명령을 실행하는 공격이다.

 

 - 주로 웹 응용 프로그램이 사용자 입력을 받아 서버에서 실행되는 명령어에 대한 검증 없이 직접 실행하는 경우 발생하며 시스템 명령을 실행하거나 시스템의 제어권을 획득할 수 있다.

 

커맨드 인젝션 공격이 발생 가능한 상황

  • 입력에서 필터링이나 검증이 없을 때
  • 취약한 명령어 문자열 조립 : 웹 응용 프로그램에서 명령어 문자열을 사용자 입력과 결합하여 실행하는 경우, 입력값을 적절하게 이스케이프하지 않고 그대로 사용할 경우 공격자는 입력에 악의적인 명령어를 포함시켜 실행될 수 있다.
  • 에러 메시지 노출 : 웹 응용 프로그램에서 명령어 실행 시 발생하는 에러 메시지를 화면에 노출하는 경우, 공격자는 에러 메시지를 통해 시스템 정보를 얻거나 명령어 실행 결과를 확인할 수 있다.

 

예시)

ping -c 4 + domain

www.google.com; cat /etc/passwd;//위 입력으로 구글 도메인에 핑을 실행하고 ";"특수문자로 앞 명령어 실행후 뒤 명령어가 실행하게 만든 다음 cat /etc/passwd명령을 사용하여 passwd파일을 확인하여 계정 및 비밀번호를 확인할 수 있다.

 

커맨드 실행 공격과의 차이

 - 커맨드 인젝션 공격은 커맨드 실행 공격의 하위 집합으로 볼 수 있다.

 커맨드 인젝션 공격은 사용자 입력을 통해 서버에서 명령어를 실행하는 부분에 취약점이 존재할 때 발생하는 공격이고,

커맨드 실행 공격은 웹 응용 프로그램 외부에서 직접 명령어를 실행하는 경우에 해당한다.

 

공격 실습)

 - 127.0.0.1로 ip 주소를 입력해보면 ping명령어가 실행된다.

 - view-source를 보면 ip주소를 받아 핑 명령어를 수행한다.

ping -c(count)는 전송할 요청 패킷의 횟수를 정하는 옵션

shell_exec : php에서 쉘을 통해 명령을 실행하고 전체 출력을 문자열로 반환

윈도우일때, 리눅스일때에 맞춰서 코드가 실행된다.

$target의 값은 위에서 사용자로부터 입력 받은 ip이다. 즉, 이렇게 코드를 만들면 터미널에서 만드는 것과 같다.

;뒤에 리눅스 명령어를 입력하여 명령을 연속해서 입력하면 결과가 나온다.

 

대응방안

  1. 입력의 필터링 및 검증 : 사용자 입력에 대해 적절한 필터링과 검증을 수행하여 예상치 않은 문자나 명령어가 포함되지 않도록 한다.
  2. 입력의 이스케이프기법 : 사용자 입력이 명령어 문자열과 결합될때 문자열 이스케이프 기법을 사용하여 사용자 입력의 특수 문자를 제거한다.
  3. 원격 명령 실행 제한 : 시스템에서 원격으로 명령을 실행하는 기능을 최소한으로 제한하거나 사용하지 않도록 해야 한다.
  4. 에러 메시지 관리 : 에러 미시지를 최소화해서 공격자에게 유용한 정보가 노출되지 않도록 해야 한다.

 

 - 요약

sk쉴더스 EQST 2023보안 위협 전망 보고서에 따르면 2022년 공격 이벤트 통계에서 command execution 공격이 18만건으로 가장 많이 집계되었고, command injection이 7만건으로 여전히 위협적이다.

커맨드 인젝션 공격 커맨드 실행 공격

막상 실습으로 공격해보면 뚫기 쉽지 않다.

 

 - 참고

chatGPT

https://owasp.org/www-community/attacks/Command_Injection

https://cybersecuritykong.tistory.com/10

https://yehey-study.tistory.com/entry/%EC%BB%A4%EB%A7%A8%EB%93%9C-%EC%9D%B8%EC%A0%9D%EC%85%98-%EA%B3%B5%EA%B2%A9-Command-injection