IT/영어 공부노트
Command Injection 정리 본문
반응형
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) |
참조
반응형