OS Command Injection 은 일반적인 요청값에 시스템 명령어를 주입하여 서버에 접근하는 공격이다. 이 때 ;, |, ||, && 와 같은 메타문자를 이용한다.
bee-box 환경에서 실습해보자!
Level - low
일반적으로 nslookup 명령어를 이용하여 DNS 정보를 출력해주는 페이지이다. 입력창에 ; 을 이용하여 새로운 명령을 실행할 수 있는지 확인해보자.
기존 입력값에 ; 을 붙이고 뒤에 명령을 입력한 결과, 정상적으로 실행되었다. 별다른 입력값 검증이 없는 것 같다.
Level - medium
; 를 이용하여 새로운 명령을 요청했지만 아무 결과도 출력되지 않았다. ; 이 필터링되어 있는 듯 하다. 그래서 | 를 이용해보았다.
성공적으로 명령이 수행되었다.
Level - high
어떤 메타문자를 이용해도 명령이 수행되지 않았다. Injection 할 수 있는 방법을 찾지 못했다.
소스코드 분석
low level 에서는 입력값 검증을 수행하지 않고 있다.
medium, high level 에서는 각각의 함수를 통해 입력값을 검증하고 있다.
medium level 의 commandi_check_1() 함수에서는 & 과 ; 를 필터링하고 있다. 때문에 | 로 Injection 하는 것을 막지 못한 것이다.
high level 의 commandi_check_2() 함수에서는 escapeshellcmd() 함수를 사용하고 있다. 이 함수는 메타문자를 막는 함수이다.
대응 방안
escapeshellcmd() 함수 사용 (우회 가능하다면 X)
'웹 취약점(bee-box)' 카테고리의 다른 글
SSI (Server Side Includes) Injection (0) | 2020.03.25 |
---|---|
PHP Code Injection (0) | 2020.03.25 |
iFrame Injection (0) | 2020.03.24 |
HTML Injection - Stored (0) | 2020.03.23 |
HTML Injection - Reflected (0) | 2020.03.23 |