-----------------------------------------------------------------------------------------------------
시스템 명령어 삽입 허용(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 |