본문 바로가기
about Security/웹보안과 해킹

[웹해킹] # 커맨드 인젝션

by saniii 2020. 10. 8.

# 커맨드 인젝션 #

: 웹을 통해 시스템명령어(command)를 실행하는 공격

(SQL 인젝션과 더불어 인젝션 리스크와 관련된 주요 공격 기법.)

커맨드 인젝션을 통해 해커가 웹내부에서 시스템 명령어를 실행할 수 있어 심각한 영향을 초래할 수 있다.

(ping : 입력된 ip주소의 시스템이 현재 동작하고 있는지 확인할 때 사용하는 커맨드)


è  ip주소뒤에 ;을 붙인뒤 원하는 커맨드를 추가하면 시스템이 

명령어입력으로 인식하여 해커가 입력한 시스템 명령어까지 실행한다.


++ ip주소만 입력했을 때

 

 


 

++ low단계에서 커맨드 인젝션

 

입력창에 127.0.0.1;cat /etc/passwd 라고 입력



ping명령어 외에도 cat /etc/passwd를 실행했다.



---이때 웹페이지의 코드를 확인해보자

ping 명령어 뒤에 붙을 ip주소 입력값에 대한 검증코드가 없으므로 

세미콜론을 붙여 다른 커맨드를 실행할 수 있다.





++ medium 단계에서의 커맨드 인젝션


low단계에서는 127.0.0.1;cat /etc/passwd에 대한 결과값이 출력되었으나 

medium단계에서는 출력되지 않는다.


이때의 소스코드를 확인해보자.



&&;가 입력값에 들어있다면 입력값을 삭제하도록 처리했음을 알 수 있다.

다른 기호 (ex/ &)를 사용할 시 추가적인 커맨드가 처리됨을 확인할 수 있다.


 

 

 

 

++ high 단계에서의 커맨드 인젝션


Low medium에서 가능했던 많은 명령어들이 실행되지 않음을 알 수 있다

바로 코드를 확인해보자.




더 많은 문자가 필터링 되어있음을 알 수 있다.

 


역시 코드에서 필터링하지 않은 다른 기호를 ip주소뒤에 붙인 다음 커맨드를 입력하면 실행가능하다.


(위에서 “|”뒤에 “ ”(띄어쓰기)가 되어있음을 알 수 있다

따라서 띄어쓰기 없이 |로 연결하면 커맨드를 실행할 수 있다.)

 


 

 

++ impossible 단계에서의 커맨드 인젝션

(커맨드 인젝션 공격 대응 / 사용자의 입력값이 원래의도에 맞는지 검사하는 것)


어떤 우회기법도 가능하지 않다.

코드를 확인해보자



숫자.숫자.숫자.숫자 (정수)형식(= ip형식) 입력가능하도록 필터링 했음을 알 수 있다.

 

 

 

 


댓글