1. Command Injection 공격 개요
커맨드 인젝션 공격이란 영어로 번역하면 Command Injection Attack인데 정의 그대로 Command에 임의의 명령어를 삽입하고 요청을 보내 웹 서버에서 실행되게 하는 공격이다. 어떤 웹 어플리케이션 공격이 내부에서 실행된다고 했을 때 사용자가 입력한 값이 적절한 검증 절차가 존재하지 않으면 입력했던 시스템 명령어가 그대로 전달되서 공격자는 이 값을 조작해 시스템 명령어 삽입 시도 공격을 할 수 있게 된다.
<출저: 화이트해커를 위한 웹 해킹 기술>
그림에서 사용자가 IP 주소를 입력해 ping 명령어를 입력하면 웹 서버에 보내져 ping 명령어를 실행하는 웹 사이트에 접속했음을 알려주는 시나리오다. 공격자는 ping 주소 뒤에 ;를 붙이고 cat /etc/passwd라는 시스템 명령어 삽입 공격을 시도한다. 만약 시스템 명령어 삽입 공격이 성공하면 공격자가 원하는 결과를 볼 수 있게 된다.
2. 공격 실습
<그림 2-1> DVWA Command Injection>
DVWA에서 Command Injection을 실행시켜 IP 주소 란에 127.0.0.1을 입력하면 웹 서버에서 ping 결과를 알려준다. 만약 이 명령어를 리눅스 상에서 입력해도 똑같은 결과값이 나온다.
<그림 2-2 취약한 소스코드>
커맨드 인젝션 공격이 시도될 때 어떻게 동작되는지 알아보기 위해 소스코드를 진단한다. 여기서 shell_exec(); 함수가 호출되는데 이 함수는 시스템 명령을 내리는 역할을 한다. 현재 소스코드에선 'ping -c 4'를 통해 ping을 보내게 되는데 -c는 횟수를 제한하는 옵션이고 여기선 ping 값을 4번 전달받겠다는 의미다. $target는 웹의 요청 메세지로부터 전달된 파라미터 값으로 이 부분에 ip를 입력해 ping 명령이 실행된다. 이 소스코드에선 특수 문자(;,&,% 등)를 필터링 해주는 코드는 없기 때문에 ; 뒤에 리눅스 명령어를 실행시키면 동작하게 되는 취약한 소스코드로 판단할 수 있다.
<그림 2-3 리눅스 ping 명령어>
콘솔에 ping -c 4 127.0.0.1을 입력해 실행하면 그림 2-1과 동일한 결과가 나온다. 이 때 4는 ping을 4번 보내겠다는 의미다.
<그림 2-4 시스템 명령어 삽입 시도>
이번엔 공격자 입장에서 시스템 침투를 시도한다. 그림 2-3에선 127.0.0.1에서 끝났지만 그림 2-4에선 ;(세미콜론)을 붙여 시스템 명령어를 삽입한다. ls 명령어를 삽입하고 실행하면 그림 2-4와 같이 현재 로컬에 존재하는 폴더 목록들을 볼 수 있다.
<그림 2-5 시스템 명령어 삽입 공격 시도>
DVWA에서 ;cat /etc/passwd 명령어를 삽입해 공격을 시도하면 그림 1-5와 같이 현재 웹 서버에 있는 디렉토리 목록들이 전부 노출되었음을 볼 수 있다. 이 공격이 가장 기본이 되는 커맨드 인젝션 공격 방법이며 실제로도 이와 같은 방식으로 공격이 들어올 때가 있다.
<그림 2-6> Command Injection 공격 패턴
실제로도 많이 사용되고 있는 커맨드 인젝션 공격 패턴이다. 보안관제에서 만약 이 패턴들이 들어왔을 때 차단을 하게 되는데 실제 이 패턴이 공격자들이 상당히 즐겨쓰는 패턴이기도 하다. 또한 모의해킹을 수행할 때도 이 패턴으로 점검을 수행하기도 한다.
'웹해킹 > DVWA' 카테고리의 다른 글
파일 업로드 공격 대응 방안 (0) | 2020.01.04 |
---|---|
파일 업로드 공격 (2) (0) | 2020.01.04 |
파일 업로드 공격 (1) (0) | 2020.01.04 |
파일 실행(File Inclusion) 공격 (2) (0) | 2020.01.04 |
파일 실행(File Inclusion) 공격 (1) (0) | 2020.01.04 |