웹 어플리케이션은 OS Command를 위한 PHP(system), Node JS(child_process), Python(os.system)과 같은 함수가 존재.
일반적으로 웹 어플리케이션에서 OS Command를 사용하는 이유는 이미 기능을 구현한 OS 실행 파일이 존재할 때 코드 상에서 다시 구현하지 않고 이를 실행하면 더 편리하기 때문.
OS Command는 내부적으로 shell 사용하고, shell은 한 줄에 여러 명령어를 실행하는 특수 문자가 존재.
만약 사용자가 OS Command의 입력 값을 검증하지 않고 함수의 인자로 전달 시에 특수 문자를 통해 사용자가 원하는 명령어를 함께 실행 가능.
`` | 명령어 치환 ``안에 들어있는 명령어를 실행한 결과로 치환됩니다. |
$ echo `echo theori`theori |
$() | 명령어 치환 $()안에 들어있는 명령어를 실행한 결과로 치환됩니다. 이 문자는 위와 다르게 중복 사용이 가능합니다. (echo $(echo $(echo theori))) |
$ echo $(echo theori)theori |
&& | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생하지 않아야 뒷 명령어를 실행합니다. (Logical And) |
$ echo hello && echo theorihellotheori |
|| | 명령어 연속 실행 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. 앞 명령어에서 에러가 발생해야 뒷 명령어를 실행합니다. (Logical Or) |
$ cat / || echo theoricat: /: Is a directorytheori |
; | 명령어 구분자 한 줄에 여러 명령어를 사용하고 싶을 때 사용합니다. ;은 단순히 명령어를 구분하기 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행합니다. |
$ echo hello ; echo theorihellotheori |
| | 파이프 앞 명령어의 결과가 뒷 명령어의 입력으로 들어갑니다. |
$ echo id | /bin/shuid=1001(theori) gid=1001(theori) groups=1001(theori) |
ip를 입력받아 ping을 보내는 메소드.
Command Injection을 수행할 경우 Command를 실행하는 웹 어플리케이션 권한으로 임의의 명령어 실행가능.
ip자리에 ip와 ; 등의 메타 문자를 넣어서 또다른 명령어 연속 수행 가능.
ex) 127.0.0.1 ; id (id 명령어 수행
Command Injection 방지를 위해서 OS Command를 사용하지 않는 것이 가장 좋은 방법.
라이브러리 형태로 구현된 OS Command를 사용하거나 직접 프로그램 코드로 포팅해서 사용
그 외 정규식을 통핸 화이트 / 블랙 리스트 필터링 방식.
화이트 리스트는 입력으로 들어올 수 있는 값을 지정해 놓고 그 외에는 모두 차단.
블랙 리스트는 차단할 입력 값을 미리 지정해 놓고 해당 값들 차단.
ip를 따옴표로 감싸는 방법도 존재.
" (Double Quotes) 사용시에는 이 안으로 들어오는 dollarsign ($), backquote (`) 가 해석되기 때문에 Dobble Quotes 사용해야 한다.
'Security' 카테고리의 다른 글
[Webhacking] path traversal (0) | 2021.09.24 |
---|---|
[Webhacking] server side template injection (SSTI) (0) | 2021.09.24 |
[Webhacking] SQL Injection (0) | 2021.09.20 |
[Webhacking] server-side basic (0) | 2021.09.20 |
[Webhacking] click jacking (0) | 2021.09.19 |