반응형
SMALL

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 공격 패턴

실제로도 많이 사용되고 있는 커맨드 인젝션 공격 패턴이다. 보안관제에서 만약 이 패턴들이 들어왔을 때 차단을 하게 되는데 실제 이 패턴이 공격자들이 상당히 즐겨쓰는 패턴이기도 하다. 또한 모의해킹을 수행할 때도 이 패턴으로 점검을 수행하기도 한다.

 

 

 

반응형
LIST

'웹해킹 > 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
블로그 이미지

만년필석사

,