Command injection

- 커멘드 인젝션(command injection) 이란?웹 요청 메시지에 임의의 시스템 명령어를 삽입해 웹 서버에서 명령어를 실행하도록 하는 공격임 사용자가 입력한 값을 적절한 입력값 검증 없이 시스템 명령어의 일부분으로 전달하면 공격자는 이 값을 조작하여 임의…

- 커멘드 인젝션(command injection) 이란?

웹 요청 메시지에 임의의 시스템 명령어를 삽입해 웹 서버에서 명령어를 실행하도록 하는 공격임

 

사용자가 입력한 값을 적절한 입력값 검증 없이 시스템 명령어의 일부분으로 전달하면 공격자는 이 값을 조작하여 임의의 시스템 명령어를 실행할 수 있음.

 

예를 들어 

A가 서버에게 ping 명령 어을 보냅니다 그런데 여기서

x.x.x.x(ip 주소)에 ; cat /etc/passwd를 삽입하는 것입니다.

리눅스에서 ;은 복수 명령어를 실행하는 의미를 가집니다 즉

ping 명령어와 cat 명령어를 동시에 쓸 수 있다는 것이죠 

 

 

실습

 

 

커멘드 인젝션 입력창이 보임 보면 IP 주소를 적으라는 거 같음 그래서 로컬 주소인 127.0.0.1을 쳐서 제출해 보았음

 

핑이 잘 전달됨 

 

<소스코드>

 

 

여기에 보면 Shell_exec() 함수가 있음 시스템의 명령어를 내리는 함수임

 $cmd = shell_exec(' ping -c 4 ' , $target); 소스코드를 보면 cmd 명령어창으로 ping을 4번 보낸다, target은 위에 보면 $_REQUEST의 값을 저장받는 변수 즉, ip 주소를 치면 ping을 4번 출력하라는 뜻임 여기서 -c 옵션은 횟수임 4로 지정하면 4번 실행 3번이면 3번 실행하도록 제어해 주는 명령어 옵션임

 

여기서 ; 를 붙여서 다른 명령어를 실행한다면?

 

 

; ls 만 쳐도 나오고 

 

 

ping 명령어와 ls 명령어를 동시에 수행하는 것을 볼 수 있음.

 

해커 입장에서는 이러한 공격이 통한다는 것을 알았으니 계정/PW가 있는 명령어를 실행하게 될 것인데 

/etc/password를 출력해 볼 것이다 cat이라는 명령어를 사용하면 /etc/password 파일의 내용을 읽을 수가 있다.

 

 

이런 식으로 계정 정보를 볼 수가 있었다. ; 이러한 문자 하나가 치명상이 될 수 있다는 게 무섭다..

 

Tip
- 리눅스에서는 ; 를 쓰지만 윈도우에서는 &&를 사용한다. 이외에도 다양한 특수문자를 통해 공격을 시도 가능하다.

 

간혹 root 사용자 권한으로 실행하는 경우 막대한 위험을 초래할 수 있음.

일명 권한 상승 공격을 시도함