본 포스트는 https://www.udemy.com/의 강좌 화이트헤커가 되기 위한 8가지 웹 해킹 기술 강좌를 바탕으로 작성했습니다.
커멘드인젝션 공격이란?
커맨드 인젝션은 명령어를 삽입한다는 뜻으로 웹 요청에 시스템 명령어를 보내 이를 실행하도록 하는 방법이다. 웹 내부에서 시스템 명령어를 실행하는 경우 사용자가 입력한 값이 올바른지 검사하지 않고 시스템 명령어의 일부분으로 전달한다면, 해커는 이 값을 조작하여 다른 시스템 명령어를 실행할 수 있다.
[공격 시나리오]
한 웹페이지가 있다. 이 웹페이지는 사용자가 IP주소를 입력을 받는다. 서버에서 사용자가 입력한 IP에 시스템 명령어인 ping명령어를 실행하여 ping 결과를 알려주는 웹 페이지가 있다고 하자. (ping 명령어는 IP주소를 가진 어떤 시스템이 동작하는지 확인하는 명령어이다.) 그런데 해커가 ping IP; cat /etc/passwd라고 입력했다고 하자. 여기서 cat /etc/passwd는 리눅스에서 사용자 목록을 확인할때 사용하는 명령어이다. ;는 리눅스에서 2개의 명령어를 모두 실행하게 된다. 해커가 입력한 값이 IP주소인지 검사하지 않고 서버로 전송하면 원래 실행되야할 ping명령어 뿐만 아니라 etc/passwd값 또한 실행되서 해커가 사용자 정보를 얻을 수 있다.
[실습 방법]
Low level
커멘드 인젝션 페이지로 간다. IP주소를 입력하면 핑을 보내주는 시스템이다. 로컬 아이피 주소
127.0.0.1입력 소스코드를 보면 shell_exec함수가 있다. 시스템 명령을 내리는 함수이다.
ping -c 4 127.0.0.1 : -c는 핑을 보내는 횟수이다. 4번 핑 하는 것이다.
리눅스에서 ;을 이용해서 여러개의 명령어를 실행할 수 있다. ping -c 4 127.0.0.1; ls하면 핑 결과가 나오고 ls 경과가 나온다.
Medium level
&&은 윈도우에서 ;와 같은 역활을 한다.
그러나 |(파이프라인) 을 막아주지는 못한다.
High level
대응하는 문자열이 많이 들어났다. &, + , , , || 등등 불필요한 문자열을 지우거나 바꿈으로서 공격에 대응하고 있다.
그러나 개발자가 실수한 부분이 있다.
[공격 대응]
실제로 사용자가 입력한 값이 IP인지 검증을 하면 된다.
실습처럼 IP주소를 입력받는 경우 .으로 이루어져 있는지, 각각의 값이 숫자로 이루어져 있는지 검증해야 한다.
'Computer Science > Security' 카테고리의 다른 글
[화이트헤커가 되기 위한 8가지 웹 해킹 기술]파일 인쿨루젼 공격(Local File Inclusion Attack) (0) | 2017.08.23 |
---|---|
[화이트헤커가 되기 위한 8가지 웹 해킹 기술]CSRF 공격(CSRF ATTACK) (0) | 2017.08.23 |
[화이트헤커가 되기 위한 8가지 웹 해킹 기술]브루트 포스 공격(Brute Force Attack) (0) | 2017.08.22 |
Kali Linux Error Collections & Settings (0) | 2017.08.22 |
[화이트헤커가 되기 위한 8가지 웹 해킹 기술]웹해킹 실습 환경 강의노트 (0) | 2017.08.22 |