본문 바로가기

Security

[Webhacking] Command Injection

반응형

웹 어플리케이션은 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