IT/영어 공부노트

Command Injection 정리 본문

🛡️ security/web

Command Injection 정리

소저어엉 2023. 7. 25. 15:56
반응형

Command Injection

인젝션(Injection)은 악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법을 말한다. 

 

시스템 함수: 다양합 웹 애플리케이션 제작용 언어는 시스템에 내장되어 있는 프로그램들을 호출할 수 있는 함수를 지원한다. 
ex) PHP-system, Node JS-child_process, python-os.system

시스템 함수를 사용하면 설치된 소프트웨어들을 쉽게 이용할 수 있지만, 함수의 인자를 셸의 명령어로 전달한다는 점에서 취약점으로 이어진다.

Command Injection은 이런 함수를 잘못 사용하여 발생하는 취약점이다. 

 

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

 

시스템 함수는 이용자의 입력을 제대로 검사하지 않으면 임의 명령어가 실행될 수 있다. 

이는 리눅스 셸 프로그램이 지원하는 메타문자 때문이다.
&&, ;, | 등을 사용하면 여러 개의 명령어를 실행시킬 수 있어서!

 

메타문자

메타 문자 설명 Example
'' 명령어 치환
'' 안에 들어있는 명령어를 실행한 결과로 치환
$ echo `echo theori`
theori
$() 명령어 치환
위와 동일하되, 중복 사용이 가능함
$ echo $(echo theori)
theori
&& 명령어 연속 실행
한 줄에 여러 명렁어를 사용하고 싶을 때 사용. 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행
$ echo hello && echo theori
hello
theori
|| 명령어 연속 실행
앞 명령어에서 에러가 발생해야 뒷 명령어를 실행
$ cat / || echo theori
cat: /: Is a directory
theori
; 명령어 구분자
한 줄에 여러 명령어를 사용하고 싶을 때 사용
;은 단순히 명령어를 구분하기 위해 사용하며, 에러 유무와 관계없이 뒷 명령어 실행
$ echo hello ; echo theori
hello
theori
| 파이프
앞 명령어의 결과가 뒷 명령어의 입력으로 들어감 
$ echo id | /bin/sh
uid=1001(theori)
gid=1001(theori)
groups=1001(theori)

 


참조

https://owasp.org/www-community/attacks/Command_Injection

https://dreamhack.io/lecture/courses/187

반응형