공격설명
이 취약점은 악의적인 사용자가 보안상의 취약점을 이용하여, 임의의 SQL 문을 주입하고 실행되게 하여 데이터베이스가 비정상적인 동작을 하도록 조작하는 행위입니다.
해당 구문이 정상 동작할 경우, 공격자는 결과 확인을 통해 취약점 존재 여부를 판단할 수 있으며, 데이터베이스에 침입하여 시스템의 민감한 정보를 변경하거나 탈취할 수 있습니다.
공격구문
GET /main/js?q=104207&TuYS=6734 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/; EXEC xp_cmdshell('cat ../../../etc/passwd')# HTTP/1.1
Cache-Control: no-cache
User-Agent: Opera/9.80 (Linux i686; U; en) Presto/2.5.22 Version/10.51
Cookie: csrf_cookie_name=376a7fda7c60f361a83368915a2305d1;ci_session=4d0bb1809efa64b06bb27f0937840d6ebb878222;visitor=1
Host:
Accept: */*
Accept-Encoding: gzip,deflate
Connection: close
--------------------------------------------------------------------------------------------------------------------------------------------------------------
1. SQL 인젝션 (SQL Injection)
GET /main/js?q=104207&TuYS=6734 AND 1=1 UNION ALL SELECT 1,NULL,'<script>alert("XSS")</script>',table_name FROM information_schema.tables WHERE 2>1--/**/;
AND 1=1: SQL 논리 연산을 통해 조건이 항상 참이 되도록 하여 악성 쿼리를 삽입합니다.
UNION ALL SELECT: 여러 SELECT 결과를 하나의 결과로 합칩니다. 이 부분은 공격자가 데이터베이스에서 정보를 유출하려는 시도로, **information_schema.tables**에서 테이블 이름을 가져오려 하고 있습니다.
'<script>alert("XSS")</script>': 이는 XSS 공격을 수행하는 스크립트로, 웹 페이지에서 이 코드를 실행시켜 사용자에게 팝업을 띄우거나 추가적인 악성 스크립트를 삽입할 수 있습니다.
table_name: information_schema.tables에서 테이블 이름을 노출하여 데이터베이스 구조를 파악하려는 시도입니다.
--//**/: SQL 주석 기법으로, 나머지 쿼리를 무시하고 악의적인 쿼리만 실행되도록 설정합니다.
2. RCE (원격 코드 실행)
EXEC xp_cmdshell('cat ../../../etc/passwd')#
EXEC xp_cmdshell: 이는 데이터베이스에서 시스템 명령을 실행하는 명령어로, Windows SQL Server에서 xp_cmdshell 확장 프로시저를 통해 시스템 명령어를 실행할 수 있습니다.
cat ../../../etc/passwd: 리눅스 서버에서 중요한 파일인 /etc/passwd를 읽어 사용자 계정 정보를 탈취하려는 시도입니다.
3. 보안 취약점
SQL 인젝션: 공격자는 SQL 쿼리에 직접 악의적인 명령을 삽입하여 데이터베이스에서 임의의 데이터를 가져오거나 조작할 수 있습니다. 이는 웹 애플리케이션이 사용자 입력값을 제대로 필터링하지 않을 때 발생합니다.
XSS: <script> 태그를 삽입하여 사용자의 브라우저에서 자바스크립트를 실행시키려는 시도입니다. XSS는 사용자의 세션 정보 탈취, 페이지 변조, 추가적인 악성 코드 실행 등 여러 보안 문제를 일으킬 수 있습니다.
RCE (원격 코드 실행): xp_cmdshell은 SQL Server에서 명령어를 실행해 서버 자체를 장악하려는 시도입니다. 이를 통해 서버의 민감한 정보에 접근하거나 악성 코드를 배포할 수 있습니다.
4. 대응 방안
SQL 인젝션 방어:
입력값 검증: 사용자 입력값을 철저히 검증하고 SQL 쿼리에 직접 사용되지 않도록 파라미터화된 쿼리(Prepared Statement)를 사용해야 합니다.
ORM(객체 관계 매핑): 직접 SQL을 사용하지 않고 ORM을 사용해 쿼리 실행을 추상화하여 SQL 인젝션을 방지할 수 있습니다.
XSS 방어:
입력값 필터링: 모든 사용자 입력값에 대해 HTML, 자바스크립트 등의 특수 문자를 이스케이프(escape)하여 브라우저에서 실행되지 않도록 해야 합니다.
콘텐츠 보안 정책(CSP): 브라우저가 허용된 소스에서만 스크립트를 실행하도록 강제할 수 있습니다.
RCE 방어:
xp_cmdshell 비활성화: SQL Server에서 이 기능을 비활성화하여 시스템 명령 실행을 차단합니다.
최소 권한 원칙: 데이터베이스 계정에 최소한의 권한만 부여하여 시스템 명령을 실행할 수 없도록 제한해야 합니다.
'보안관제 이벤트 분석' 카테고리의 다른 글
[보안관제] 비인가 접근 시도 탐지(HTTP Suspicious Access Attempt (URI : /view-source)) (1) | 2024.10.10 |
---|---|
[보안관제] Ruckus Wireless Admin Login Code Execution(RCE) (0) | 2024.10.10 |
[보안관제] SQL 인젝션 (0) | 2024.10.07 |
[보안관제] 비정상 HTTP 요청 탐지(ExtensionFiltering) (0) | 2024.10.07 |
[보안관제] URL 패턴 탐지 (0) | 2024.10.02 |