1 분 소요

ServerSide : Command Injection

웹 애플리케이션을 개발하다보면, 특정 기능을 스스로 코드를 작성하기보다 이미 설치된 함수, Command 를 사용하기도 한다.

함수의 인자를 셀의 명령어로 전달한다는 점에서 치명적인 취약점이 만들어진다.

Command Injection

Command Injection은 명령어를 실행하는 함수에 이용자가 임의의 인자를 전달할 수 있을 때 발생한다.

예를들어 파이썬으로 개발된 웹 애플리케이션에서 IP 에 ping 을 전송하고 싶으면

“os.system(“ping [user-input]”)”를 입력하면 된다.

이러한 함수를 사용할 때 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행될 수도 있다. 이는 리눅스 셸 프로그램이 지원하는 메타 문자 때문이다.

메타문자 설명 Example
’ ‘ 명령어 치환 ‘ ‘안에 들어있는 명령어를 실행한 결과로 치환한다 $ echo 'echo theori’  »theori
$( ) 명령어 치환 $ ( ) 안에 있는 명령어를 실행한 결과로 치환한다. 중복 사용 가능 $ echo $(echo theori)  »theori
&& 명령어 연속 실행 한줄에 여러 명령어를 실행한다. (앞에 오류가 나면 뒤 명령어 실행 X) $ echo hello && echo theori  »hello theori
| | 명령어 연속 실행 한줄에 여러 명령어를 실행한다. (앞에 오류가 나도 뒤 명령어 실행 ) $ echo hello | | echo theori  »hello theori
; 명령어 구분자 한줄에 여러 명령어를 사용할때 구분을 도와준다 (앞에 오류가 나도 뒤 명령어 실행 ) echo hello ; echo theori  »>hello theori
| 파이프 앞 명령어의 결과가 뒷 명령어의 입력으로 들어간다 $ echo id | /bin/shuid=1001(theori) gid=100  »(theori) groups=1001(theori)

댓글남기기