Command Injection

GGos3·2022년 3월 28일
0

웹 취약점

목록 보기
1/1

🦢Command Injection이란?

사용자가 웹 서버에 요청한 URI의 변수 값에 대해 정상적인 입력 값 외에 추가적으로 시스템 명령을 삽입해 요청하는 경우 웹 서버가 이 요청을 일반 변수로 인식해 시스템 명령이 실행되는 취약점이다.

삽입구문

;exec master..xp_cmdshell 'ipconfig'
;/bin/ls -al
;system("cmd.exe dir c:\")
+|+ dir c:\

1번 구문은 MS-SQL의 확장 프로시저를 이용한 시스템 명령실행이고
2번 구문은 'system' 함수를 이용한 시스템 명령을 값으로 전달해 명령이 실행되게 하는것이다

실제 취약점을 확인하는 방법은 'http://도메인명/파일명?변수명=변수 값' 과 같은 GET 방식으로 구문을 삽입해 시스템 명령이 실행되는지 확인한다.

예시

http://도메인명/download.php?filename=;/bin/ls -al
http://도메인명/download.php?filename=abc.txt;/bin/ls -al

GET 방식이 아닌 POST 방식으로 값을 전달 하는 경우 바디에 값을 삽입 한다.

db=freeboard filename=/bin/ls%20-al

POST 방식으로 값을 전달 하는경우 변수 크기에 제한이 없지만 헤더 부분의 컨텐츠 타입을 맞춰 주어야 한다.

취약한 함수

언어사용함수
PHPreqire(), include(), eval(), preg_replace()(/e 옵션과 함께 사용), exec(), passthru(), (backticks), system(), popen(), Shell Scrips 등
Perlopen(), sysopen(), glob(), system(), "(backticks), eval() 등
JavaSystem. *(특히 system, Runtime)

대응방안

소스코드에 운영체제 명령을 실행 할 수 있는 취약한 함수의 사용을 지양해야 하고, 변수 입력 값에 대해 입력 가능한 문자열을 지정한 수 지정한 문자열 이와의 나머지 문자열은 필터링을 해야한다. 또한 "|, ;"와 같이 다중 명령을 실행 할 수 있는 구분자도 필터링 해야한다.

profile
Newbie

0개의 댓글