Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "구글해킹과 SQL인젝션 지창훈, 최연우."— Presentation transcript:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

15 웹해킹 피해 통계

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

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

18 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의 허점이 존재하지 않도록 주의해야 한다.

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

20 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 구문을 받는 부분이 있다면 이를 제거해야 한다.

21 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= 메인 페이지로 redirect OCIFetchInto($result, &$rows); ... 중략 ... -안전한 SQL Injection 예제 $query = sprintf("SELECT id,password,username FROM user_table WHERE id='%s';",addslashes($id)); // id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다. 로 php 에러 메시지를 막는다. $result $query); if error("SQL 구문 에러"); exit; @OCIFetchInto($result,&$rows); ... 중략 ... -addslashes() 함수 사용 : 사용자가 입력하는 값들($_GET, $_POST)을 모두 addslashes() 함수를 이용하여 처리하여 준다.addslashes() 용도 : DB Query와 같이 인용된 부분앞에 역슬래쉬를 붙여서 반환한다. 해당 문자에는 작은 따옴표, 큰 따옴표, 역슬래쉬, NULL이 있다. SQL Injection 공격을 위해서 사용한다. - 적용 가능한 PHP : PHP 3 이상

22 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 이상

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


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

Similar presentations


Ads by Google