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

 

웹을 통해 시스템명령어(커맨드)를 실행하는 공격으로 어떤 웹 사이트가 내부에서 시스템 명령어를 실행하는 경우, 만약 사용자가 입력한 값을 올바른지 검사하지 않고 시스템 명령어의 일부분으로 전달하면 해커는 이 값을 조작하여 마음대로 다른 시스템 명령어를 실행 할 수 있다.

 

 

 

 

 

 

해커가 정상적인 웹페이지에 접속했다고 가정. 이 웹페이지는 서버에서 ping명령어를 실행하고 그 결과를 알려주는 페이지이다. ping 명령어는 ip주소를 가진 어떤 시스템이 현재 동작하고 있는지 확인할 때 사용하는 명령어이다. 이때 해커는 ip주소 뒤에 세미콜론(;)을 입력하고 다른 시스템 명령어를 추가로 전송한다. cat /etc/passwd는 리눅스의 사용자 목록을 확인할 때 사용하는 명령어이다. 만일 웹 application이 해커가 보낸 값이 ip주소 형식을 가진 값인지 제대로 검사하지 않는다면 ping뒤에 해커가 보낸 문자열을 모두 붙여 실행하게 된다.

 

 

 

 

 

 

 

세미콜론을 이러한 방식으로 넣게 되면 리눅스에서는 두 개의 명령어를 모두 실행하게 된다. 결국 원래 실행되어야 할 ping명령어 뿐만 아니라 뒤에 있는 cat 명령어까지 실행되어 etc/passwd 파일이 해커에게 넘어가게 된다.

댓글

Designed by JB FACTORY