1. 시스템 함수
- PHP : system
ex) system(“cat /etc/passwd”)
- Node JS : child_process
- 파이썬 : os.system
2. 메타 문자
1) 명령어 치환
``
- ``안에 들어있는 명령어를 실행한 결과로 치환됨
- 중복 사용 불가
$ echo \`echo theori\` theori $()
$()
- $()안에 들어있는 명령어를 실행한 결과로 치환됨
- 이 문자는 중복 사용이 가능
(echo $(echo $(echo theori)))
$ echo $(echo theori) theori
2) 명령어 연속 실행
&&
- 한 줄에 여러 명령어를 사용하고 싶을 때 사용
- logical AND
- 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행함
$ echo hello && echo theori hello theori
||
- 한 줄에 여러 명령어를 사용하고 싶을 때 사용
- logical OR
- 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행
$ cat / || echo theori cat: /: Is a directory theori
3) ; (명령어 구분자)
- 한 줄에 여러 명령어를 사용하고 싶을 때 사용
- ;은 단순히 명령어를 구분하기 위해 사용
- 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행
$ echo hello ; echo theori hello theori
4) | (파이프)
- 앞 명령어의 결과가 뒷 명령어의 입력으로 들어감
$ echo id | /bin/sh uid=1001(theori) id=1001(theori) groups=1001(theori)
3. Command Injection
: 명령어를 실행해주는 함수를 잘못 실행해 발생하는 취약점
- 인젝션(Injection)
:악의적인 데이터를 프로그램에 입력하여 이를 시스템 명령어, 코드, 데이터베이스 쿼리 등으로 실행되게 하는 기법
해결책
- 입력 값에 대해 메타 문자의 유무를 검사
- 시스템 메타 문자를 해석 하지 않고 그대로 사용하는 함수를 사용