구글해킹과 SQL인젝션 지창훈, 최연우.

Slides:



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

데이터마이닝 & 정보검색 연구실 신 현 일.  검색 시스템에 필요한 요소  인터넷 검색의 유형 / 태그란 ?  Blog 검색 시스템 설계  Target : Blog ? / 국내 Blog 사이트 분류  Collection : 어디서 무엇을 추출할 것인가 ? 
전산시스템 시스템 이용안내 메인 페이지 회원가입 원격시스템. 전산시스템 시스템 이용안내 회원가입 ※ 중요한 정보 : 검사진행문자, 인증키 발송 등.
LOGO 중소기업체 대상 무료 정보보안컨설팅 제안서. LOGOClick To Edit Title Style 목 차 한국 IT 전문학교 해킹 피해 사례 제안의 개요 및 목적 보안컨설팅 수행 절차 기대효과 조직도 및 연락처.
Chapter 02. 웹에 대한 이해. Chapter 02. 웹에 대한 이해 웹의 역사 HTTP 웹 애플리케이션 기술.
Chapter 03. 웹 해킹의 기초. Chapter 03. 웹 해킹의 기초 해킹 기술의 진화 일반적인 웹 해킹의 절차 OWASP Top 10 취약점 WebGoat 설치.
DB Injection과 대응방안 nwkim.
웹 프로그래밍 HTML, 자바스크립트, ASP를 중심으로
소리가 작으면 이어폰 사용 권장!.
김 상 국, 김 기 훈 한남대학교 컴퓨터공학과 데이터베이스 실험실
예방접종 정보 SITE.
소프트웨어시스템설계(6주) 데이터베이스 연동
데이터베이스 설계 및 구축 동물병원 데이터베이스 설계 작성자 : 송영민
Chapter 03 웹 해킹의 기초.
Safecode® 3.0 ㈜코드원 웹 애플리케이션 취약점 제거 및 관리 솔루션
C#에서 데이터베이스 연동 방법.
Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS
SQL*Plus - Oracle ISQL -
JDBC 개요 Section 04 JDBC 개념과 역할 JDBC 구조 애 플 리 케 이 션 오라클 DBMS MySql DBMS
Chapter 05 SQL 인젝션 공격.
JDBC 프로그래밍 이수지 이동주 1.
1. JSP(Java Server Pages) 소개
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
DB와 WEB 연동(1) [2-Tier] Java Applet 이용
Chapter 04. 웹 보안 : 웹, 그 무한한 가능성과 함께 성장한 해킹
Web Server와 DB 연동.
1장. JSP 및 Servlet을 활용한 동적 웹 프로그래밍 소개 제1장.
데이터베이스 와 JDBC 1.데이터베이스와 데이터베이스 관리 시스템은? 2.데이터베이스 장점?
11장. 데이터베이스 서버 구축과 운영.
ASP 정 보 보 호 학 과 양 계 탁.
2007. Database Term Project Team 2 윤형석, 김희용, 최현대 우경남, 이상제
중 간 고 사 (웹프로그래밍)
Chapter 07 소스코드의 취약점 분석.
인터넷 보안 정보 보안 개론 5장.
ASP를 이용한 전자상거래 사이트 구축 지도교수님: 이형원 컴퓨터응용과학부 박정선.
자격증 모의 테스트 시스템 담당 교수 : 이 상 문 교수님 팀명 : CSCLAB
웹서버와 설치에 필요한 것 WWW ( world wide web ) TCP/IP 프로토콜을 이용하는 클라이언트/서버 환경
정보보안 CH4 웹 보안.
8 데이터베이스 사용하기.
12 데이터베이스 사용하기.
04장 웹 보안: 웹, 그 무한한 가능성과 함께 성장한 해킹
01 데이터베이스 개론 데이터베이스의 등장 배경 데이터베이스의 발전 과정 데이터베이스의 정의 데이터베이스의 특징
2012 인터넷 응용프로그래밍 FTP, MySQL 사용 방법 및 텀 프로젝트용 서버에서 웹페이지 구동 방법 설명
JDBC (Java Database Connectivity)
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
BIZSIREN 실명확인서비스 개발 가이드 서울신용평가정보㈜ 신용조회부 (TEL , FAX )
제 9장: 파일과 데이터베이스 데이터 구성에서부터 데이터 채굴 까지.
Chapter11 웹 스토리지 & 웹 데이터베이스
Web Vulnerabilities 정보 보호 2008/05/31 Getroot.
JSP 게시판 구현.
II. XML과 Database 연동 [Beginning XML, 제13장]
CGI (Common Gateway Interface)
JSP Programming with a Workbook
Part 5. MS-SQL Server Basic
Database 중고차 매매 DB 비즈니스IT 윤동섭.
CGI (Common Gateway Interface)
3장. SQL Server 2008전체 운영 실습 및 DB와 프로그램의 연동
01. 데이터베이스와 SQL 개요.
2장. 홈페이지를 만들기 전에 홈페이지 제작 목적과 제작 과정 홈페이지 제작 관련 기술들 홈페이지 제작에 필요한 준비물
ASP 수행 화면(1).
SQL INJECTION MADE BY 김 현중.
IITP-PMS 전산접수 매뉴얼 (신청자용) 정보서비스팀.
공학설계입문 블로그 제작 목차 전기공학과 정지용.
중학교 수학 ①/②/③ 교과서, 지도서 / ㈜교학사 (대표저자 : 고호경외 12명) Ⅰ. 교과서의 구성 Ⅱ. 교과서의 특장점
뇌를 자극하는 Windows Server 장. 데이터베이스 서버.
주요공지로 정할 글을 올립니다. 제목과 주소를 복사해둡니다
Data Base Web Programming
경희대학교 학위논문제출 교육 테크노경영대학원 2008년 11월 25일.
관리자 페이지에서 관리자 승인 1. 정기권 신규고객 1. 로그인 화면 2. 차량등록여부 확인 3. 개인정보 활용 동의
GB ridge 웹 모바일및 빅데이터 응용과정 3주차: 데이터베이스 프로그래밍 [경기도형 대학생 취업브리지 사업]
Presentation transcript:

구글해킹과 SQL인젝션 지창훈, 최연우

구글해킹과 SQL인젝션 _ 발표자 자기소개 지창훈 (구글해킹) 최연우 (SQL인젝션) - 해커스쿨 해킹캠프 7회 스탭 나이 : 22 소속 : - 한국교통대 정보통신공학과 SNS : http://facebook.com/changhun-ji Blog : http://wecall.tistory.com 경력 : - 유료인터넷 강의 취약점 데일리시큐 제보 - 제로보드4 엔진 취약점 데일리시큐 제보 - Windows XP SafeSys 복구프로그램 개발 - 마피아엔터테이먼트 마케팅부서 근무중 최연우 (SQL인젝션) 나이 : 17 소속 : - 포천고등학교 1학년 - HackerSchool - WiseGuys SNS : http://facebook.com/yw720 Blog : http://yw720.net 경력 : - CODEGATE Junior 발표 - 데일리시큐 객원기자 활동 - 마이크로소프트 WOWZAPP 2013 참여 - 해커스쿨 해킹캠프 7회 스탭

정보알림이 (http://goo.gl/hYpu4)

구글해킹이란 ? 구글해킹(Google Hacking) 이란 무엇인가 ? 1.키워드와 연산자 조합 2.취약점 웹페이지 검색 1.키워드와 연산자 조합 2.취약점 웹페이지 검색 3.취약점에 따른 해킹 기법으로 해킹하게 된다.

구글해킹 팁 해커즈뉴스 홈페이지에서는 구글해킹에대한 정 보를 얻을 수 있다.

구글해킹의 위험성 구글 검색만으로 아래와 같은 웹페이지를 볼 수 있다. 1.타인의 개인정보 수집 2.기업이나 특정 단체 비공개 문서 열람 3.숨겨진 정보 검색 4.암호가 걸려있는 페이지 열람 5.개인 정보 침해 우려

구글해킹 검색 노출의 위험성 구글에는 개인정보가 얼마나뜰까 ? 검색에 intext:"최연우" and "yw720" or "kss2740"을 검색해보니 KSIA와 블로그 데일리시큐 객원기자 활동을 한것까지 나옵니다. 이러한 개인정보 침해 및 사생활 침해를 마음껏 할수있는곳이 구글이고 그 막대한 힘이 발휘되는 시점이 바로 오늘날의 시점입니다.

구글해킹 검색 노출의 위험성 SQL인젝션을 하기위해 관리자 페이지를 inurl:admin.php site:co.kr로 검색해보았다. inurl: = 사이트 주소중 문자열 site: = 도메인 주소중 문자열 이러한 검색결과들로 페이지를 들어가게되면 SQL 인젝션 공격을 할 수 있는 여건은 충분히 마련할 수 있는 점이다. *키워드 : inurl:admin.php site:co.kr

구글해킹 검색 노출의 위험성 제로보드XE의 데이터베이스 아이디와 암호가 담겨있는 db.config.php를 검색해보았다. 또한, 이러한 해킹으로 데이터베이스로 접속 하여 개인정보를 빼내거나 삭제 및 수정을 할 수 있어 위험성이 크다. *키워드 : inurl:/files/config/db.config.php

구글봇 차단 및 예방법 robots.txt를 이용한 차단법 오른쪽 사진은 네이버 블로그 robots.txt 2.아래를 참고하여 로봇 차단 User-agent : 수집하는 주제의 범위를 정하며 *표일 경우 모든봇의 접근이 무효됩니다. Allow : 허락할 디렉토리를 설정합니다. Disallow : 불허락할 디렉토리를 설정합니다. Disallow : 뒤에 아무것도 표하지 않을때 모든 접근을 허락한다는 뜻이되고 모든디렉토리의 접근을 막고자하며 /와 같이 써주면 됩니다. 오른쪽 사진은 네이버 블로그 robots.txt

구글봇 차단 및 예방법 메타태그를 이용한 차단법 오른쪽 사진은 구글 제공 로봇 메타태그 1.HTML태크에 <head> </head> 사이에 코딩한다. 2.<meta name="robots" content="noindex" />를 코딩 해주면 검색결과에 해당 페이지를 표시하지 않도록 모든 검색엔진에 지시합니다. 오른쪽 사진은 구글 제공 로봇 메타태그

SQL인젝션이란? SQL(structured query language) 이란 무엇인가? SQL Injection이란 데이터베이스와 통하는 언어인 SQL의 취약점을 파고 들어.. 정상적이지 않은 SQL 언어를 통해 데이터베이스에서 원하는 정보를 알아내는 10대 웹해킹 방법중에 하나 입니다. 남자 : 거기 아가씨 집주소가 어디? 알려주기 싫어요.

SQL인젝션이란? 사용자 → 데이터 → 서버 → SQL Query → Database → 시스템 공격 Query : SELECT * from user_info where id=‘’ or 1=1- -’ and pw =‘’; 사용자가 데이터 값을 입력합니다. 여기서 자신의 아이디와 패스워드를 입력할경우 데이터베이스에 있기 때문에 로그인이 되고 사용자가 아닌 어드민 계정을 알기위해서는 데이터 값을 변조시켜야 합니다. 변조값을 서버에 전송한후 쿼리가 데이터베이스로 간후에 인식이 되는데 여기서 쿼리 구문중 문자열을 입력하거나 사진과 같은 구문을 입력하면 어드민 계정을 얻는 것입니다.

SQL인젝션 워게임 예시 sql 2번째는 id와 pw에 각각 7자와 5자 제한이 걸려있고, id에 admin을 치게되면 원점으로 돌아가게끔 str_replace 함수가 걸려있다. 쿼리를 id에 ‘’‘ pw에 or ’1 날려줍니다. 바로 ‘을 이용한 sql 쿼리 해석기에서 문자로 취급하게 만들어서 성공 시키고 id=’‘’‘ 이렇게 한 문자 ’ and pw=’ 한문자로 인식을 하여 뒤에 있는 ‘or ’1’ 를 앞에 쓰레기값 or 1이라는 쿼리를 날려서 성공하게 되었다. 값은 V3Ryg0odh4cKer

웹해킹 피해 통계

SQL Injection 사례들 ZeroBoard XE, Gnuboard 등 공개용 보드 취약점들. (2011.04) 소니의 온라인 비디오 시스템이 해킹 - 7,700만명의 개인정보가 유출 (2011.07) 네이트 해킹 사건 - SQL Injection으로 3,500만명 개인정보 유출 (2011.03) 넥슨 정보 유출 사건 - 고객 정보 1,320만건의 개인정보가 유출

Fileupload(Webshell)이란? 웹쉘은 공격자가 원격에서 웹서버에 명령을 수행할 수 있도록 작성한 웹스크립트(asp, php, jsp, cgi) 파일이다.많은 피해를 입고 웹서버에서 웹쉘이 발견되는 서버가 약 90% 정도이다. 공격자들이 취약점을 공격 한 후 웹쉘을 업로드 하여, 시스템을 통제하기가 수월 하다 보니 사용 빈도가 높다.

Fileupload(Webshell) 차단 1)웹 서버의 파일 업로드 취약점 제거 파일 업로드가 불필요한 게시판의 경우는 업로드의 기능을 완전히 제거하고, 필요한 경우에는 파일의확장자를 체크한다. 업로드를 제한하는 asp, chi, php, isp 등의 확장자를 막는 방법으로 구현하는 것보다 허용하는 확장자 즉, txt, hwp, doc, pdf 등의 업로드 가능한 파일 확장자만 올릴 수 있도록 체크하는 것이 바람직하다. 그 이유는 특정 확장자만 막는 경우에는 우회해서 올릴 수 있는 방법들이 존재하기 때문이다. 또한, Php, Asp, jSp등의 대소문자 혼용 및 .txt.asp등의 2중 확장자의 형태도 필터링 해야한다. 2)파일 업로드 폴더의 실행 제한 웹서버의 파일 업로드 전용 폴더를 만들고 전용 폴더의 스크립트 파일 실행을 제한하여 해당 폴더내에 있는 파일이 실행되지 않도록 해야 한다.윈도우 서버의 경우 [설정] – [제어판] – [관리도구] – [인터넷서비스관리자] 에서 마우스 오른쪽 버튼을 클릭하여 [등록정보] – [디렉토리]를 선택해 실행권한을 ‘없음’으로 설정한다.리눅스의 경우 httpd.comf와 같은 웹서버 설정 파일에서 변경한다. 3)SQL Injection 방지 웹쉘 공격은 파일 업로드 취약점 뿐만 아니라 SQL Injection을 이용해서도 가능 하므로 DB쿼리문에 삽입하여 사용하는 모든 경우에 이러한 필터를 적용하여 단 한 개의 페이지에서라도 SQL Injection의 허점이 존재하지 않도록 주의해야 한다.

SQL인젝션 차단 -데이터베이스와 연동을 하는 스크립트의 모든 파라미터들을 점검하여 사용자의 입력 값이 SQL injection을 발생시키지 않도록 수정한다. -사용자 입력이 SQL injection을 발생시키지 않도록 사용자 입력 시 특수문자(' " / \ ; : Space -- +등)가 포함되어 있는지 검사하여 허용되지 않은 문자열이나 문자가 포함된 경우에는 에러로 처리한다. -SQL 서버의 에러 메시지를 사용자에게 보여주지 않도록 설정한다. 공격자는 리턴 되는 에러 메시지에 대한 분석을 통하여 공격에 성공할 수 있는 SQL Injection 스트링을 알아낼 수 있다. 따라서 SQL 서버의 에러 메시지를 외부에 제공하지 않도록 한다. -웹 애플리케이션이 사용하는 데이터베이스 사용자의 권한을 제한한다. 가능하면 일반 사용자 권한으로는 모든 system stored procedures에 접근하지 못하도록 하여 웹 애플리케이션의 SQL Injection 취약점을 이용하여 데이터베이스 전체에 대한 제어권을 얻거나 데이터베이스를 운용중인 서버에 대한 접근이 불가능하도록 한다.

SQL인젝션 차단(ASP) -취약한 SQL Injection 예제 -안전한 SQL Injection 예제 prodId = Request.QueryString("productId") Set conn = server.createObject("ADODB.Connection") Set rs = server.createObject("ADODB.Recordset") query = "select prodName from products where id = " & prodId conn.Open "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=productDB; User Id=dbid; Password=" rs.activeConnection = conn rs.open query If not rs.eof Then response.write "제품명" & rs.fields("prodName").value Else response.write "제품이 없습니다" End If -안전한 SQL Injection 예제 prodId = Request.QueryString("productId") prodId = replace(prodId, "'", "''")' 특수문자 제거 prodId = replace(prodId, ";", "") set conn = server.createObject("ADODB.Connection") set rs = server.createObject("ADODB.Recordset") query = "select prodName from products where id = " & prodId conn.Open "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=productDB; User Id=dbid; Password=" rs.activeConnection = conn rs.open query If not rs.eof Then response.write "제품명" & rs.fields("prodName").value Else response.write "제품이 없습니다" End If -사용자로부터 입력받은 변수로 SQL 쿼리 구문을 생성하는 CGI는 입력받은 변수를 체크하거나 변경하는 로직을 포함하고 있어야 한다. -입력받은 변수와 데이터 베이스 필드의 데이터형을 일치 시켜야 하고, 사용 중인 SQL 구문을 변경시킬 수 있는 특수문자가 포함되어 있는지 체크해야 한다. -검색 부분과 같이 클라이언트로부터 생성된 SQL 구문을 받는 부분이 있다면 이를 제거해야 한다.

SQL인젝션 차단(PHP) -취약한 SQL Injection 예제 -안전한 SQL Injection 예제 $query = "SELECT id, password, username FROM user_table WHERE id='$id'";// 사용자로부터 입력받은 id 값을 사용자 table에서 조회 $result = OCIParse($conn, $query); if (!OCIExecute($result)) echo "<META http-equiv=\"refresh\" content=\"0;URL=http://victim.com\">";// 메인 페이지로 redirect OCIFetchInto($result, &$rows); ... 중략 ... -안전한 SQL Injection 예제 $query = sprintf("SELECT id,password,username FROM user_table WHERE id='%s';",addslashes($id)); // id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다. // @ 로 php 에러 메시지를 막는다. $result = @OCIParse($conn, $query); if (!@OCIExecute($result)) error("SQL 구문 에러"); exit; @OCIFetchInto($result,&$rows); ... 중략 ... -addslashes() 함수 사용 : 사용자가 입력하는 값들($_GET, $_POST)을 모두 addslashes() 함수를 이용하여 처리하여 준다.addslashes() 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 붙여서 반환한다. 해당 문자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다. - 적용 가능한 PHP : PHP 3 이상

SQL인젝션 차단(JSP) -취약한 SQL Injection 예제 -안전한 SQL Injection 예제 String sql="SELECT*FROM user_table"+"WHERE id=" + response.getParameter("id") + " AND password = " + response.getParameter("password"); Class.forName("org.gjt.mm.mysql.Driver"); conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD); stmt = conn.createStatement(); rs = stmt.executeQuery(query); while(rs.next()) -안전한 SQL Injection 예제 String sql = "SELECT*FROM user_table"+"WHERE id = ?"+"AND password = ?"; ResultSet rs = null; PreparedStatement pstmt = null; try conn = DBManager.getConnection(); pstmt = conn.prepareStatement(sql); pstmt.setString(1, request.getParameter("id")); pstmt.setString(2, request.getParameter("password")); rs = pstmt.executeQuery(); -addslashes() 함수 사용 : 사용자가 입력하는 값들($_GET, $_POST)을 모두 addslashes() 함수를 이용하여 처리하여 준다.addslashes() 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 붙여서 반환한다. 해당 문자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다. - 적용 가능한 PHP : PHP 3 이상

Q&A 지금까지 봐주셔서 감사합니다.