본문 바로가기
Security

Command Injection Flaws

by Hide­ 2007. 7. 15.
반응형

-----------------------------------------------------------------------------------------------------

                                                시스템 명령어 삽입 허용(Command Injection Flaws)

-----------------------------------------------------------------------------------------------------


웹 애플리케이션에서 HTML 형식이나 쿠키, URL 파라미터 형식으로 시스템 명령어를 삽입 허용함으로써 웹 상에서도 시스템 명령을 실행할 수 있는 취약점이다.

SQL 쿼리문을 삽입 허용하게 되면 DB인증 메커니즘을 무력화시켜서 중요한 데이터베이스 정보를 외부로 유출할 수 있다.

또한 데이터베이스의 DML(Data Manipulation Language), DDL(Data Definition Language) 언어가 모두 사용 가능하므로 데이터베이스의 유출뿐만이 아니라

무결성을 파괴할 수도 있다.



다음은 시스템 명령 삽입 허용 취약점을 악용할 수 있는 스크립트, 프로그래밍 언어의 함수들이다.



PHP

  - require()

  - include()

  - eval()

  - preg_replace() (/e 옵션과 함께 사용)

  - exec()

  - passthru()

  - `` (backticks)

  - system()

  - popen()



Shell Scripts

  - 모두 실행 가능



Perl

  - open()

  - sysopen()

  - glob()

  - system()

  - '' (backticks)

  - eval()



 



Java(Servlets, JSP s)

  - System.* (특별히 System.Runtime)



C,C++

  - system()

  - exec**()

  (strcpy strcat sprintf vsprintf gets strlen (특별히 null 바이트와 함께 사용될 경우) scanf() fscanf sscanf vscanf vsscanf vfscanf

   realpath getopt getpass streadd strecpy strtrns)



Python

  - exec()

  - eval()

  - execfile()

  - compile()

  - input()



[예방 방법]



- 반드시 필요하다면 모든 시스템 명령을 사용하는 모든 사용자의 입력값을 점검한다.

- 점검되지 않은 사용자 입력을 시스템 명령으로 전달하지 않는다.

- 점검되지 않은 사용자 입력을 파이프(|)로 전달하지 않는다.

- 점검되지 않은 사용자 입력을 perl의 open() 명령으로 전달하지 않는다.

- 점검되지 않은 사용자 입력을 C 언어와 PHP의 popen() 명령으로 전달하지 않는다.

- 점검되지 않은 사용자 입력을 ``(backticks)과 함께 사용하지 않는다.

- 운영체제의 시스템 명령이 사용자 입력에 존재하는지 점검한다.

- 모든 웹 애플리케이션엔 쉘 스크립트를 허용하지 않는다.

'Security' 카테고리의 다른 글

웹프록시 Paros 메뉴얼  (0) 2007.07.15
SQL-INJECTION (GOOD!)  (0) 2007.07.15
MySQL SELECT 문 - php와 관련하여  (0) 2007.07.15
네이버카페 모든글보기(등급무시)  (3) 2007.07.14
아래 XTrap 바이패스 만드는 법  (0) 2007.07.09