웹/웹 해킹
커맨드 인젝션 공격 / Command injection
yehey
2020. 9. 12. 19:49
커맨드 인젝션 (command injection)
:명령어를 삽입한다
웹 요청 메시지에 임의의 시스템 명령어를 삽입하고 전송, 웹 서버에서 해당 명령어를 실행하도록 하는 공격
(웹을 통해서 시스템 명령어(command)를 실행하는 공격)
커맨드 인젝션 취약점
웹 애플리케이션 내부에서 시스템 명령어를 실행하는 상황에서
적절한 입력값 검사 없이 시스템 명령어의 일부분으로 전달할 때
-> 공격자가 이 값(입력값)을 조작하여 임의의 시스템 명령어를 실행할 수 있다.
커맨드 인젝션 예시
사용자가 IP주소를 입력했을 때 웹 서버에서 ping 명령어를 실행하고 결과를 반환하는 웹페이지가 있다.
ping: 입력된 IP주소의 시스템이 현재 동작중인지 확인하는 명령어
그리고 이 웹 페이지는 사용자가 입력한 값이 IP주소 형식에 적합한지 제대로 검사를 하지 않는다고 가정하자
그렇다면 공격자는 IP 주소 뒤에 다른 시스템 명령어를 추가하여 웹 서버에서 시스템 명령어를 사용할 수 있게 된다.
(원래 실행되어야 하는 ping + 공격자가 입력한 command가 같이 실행된다.)
만약 공격자가 cat /etc/passwd 라는 명령어를 ip주소 뒤에 추가하여 보내면,
웹 서버는 ping과 cat 명령어를 모두 실행한 결과를 공격자에게 전달하게 된다.
결과적으로 공격자는 cat 명령어를 추가적으로 입력함으로써 사용자 정보를 얻게 된다.
공격자가 입력값+원하는 명령어를 실행하기 위해서는 복수의 명령어를 실행하는 특수문자를 사용해야한다.
명령어 구분을 위한 특수문자 (리눅스 기준)
; | 앞 명령어 실행 후 뒤 명령어 실행 |
&& | 앞 명령어가 참일 때 뒤 명령어 실행 |
|| | 앞 명령어가 거짓일 때 뒤 명령어 실행 |
| | 앞 명령어의 결과를 뒤 명령어로 전달 |