본문 바로가기

Hacking & Security/Web

SQL Injection

SQL Injection에 대해 알아보기 위해서는 DB를 이해해야 한다.


데이터 : 현실 세계에서 존재하는 여러가지 정보

ex) 친구 이름 , 주소 ..etc


데이터베이스 : 데이터를 효율적으로 관리하기 위해 분리한 정보

데이터베이스는 테이블로 이루어져있고 테이블은 필드로 이루어져있다.

DLL 언어 : 데이터베이스의 테이블을 정의하고 작성 ( create(생성) , alter(변경) , drop(삭제) )
DML 언어 : 데이터베이스를 추가, 갱신, 삭제 및 검색 수행 ( select , insert , update , delete )
DCL 언어 : 데이터베이스의 보안과 데이터의 연속성을 유지 ( grant(권한할당) , revoke(권한제거) , commit(데이터 변경 승인 ) , rollback(데이터 변경 취소 ) )

ex)         테이블 이름 : 상품

 상품번호

 상품이름

가격 

Mp3 

100,000 

notebook 

1000,000 


DB안에 상품이라는 테이블이 있고 , 테이블에는 상품번호 , 이름 ,가격이라는 필드가 있다.


Select * from 상품;            // 상품이라는 테이블의 모든 필드를 뽑겠다. ( select 필드 from 테이블 )
Select * from 상품 where 상품이름 = "Mp3";                // where 조건절 추가

insert into 상품 ( 상품번호 , 상품이름 , 가격 ) Values ( 100, 'LCD' , '3000000' );

// 상품 테이블에 상품번호 100 , 상품이름 'LCD' , 가격 '3000000' 추가

update 상품 set 가격 = 50000 where 상품이름 = 'Mp3';        // 상품 테이블에 상품이름이 Mp3인것의 가격을 50000원으로 update


Select * from 직장인 Union Select * from 학생 ;         // 직장인 테이블과 학생 테이블의 교집합 추출 ( 단 , 두개의 데이터형이 동일해야한다 )


SQL 인젝션 종류

1) 논리적 에러를 통한 접근
ex)    SELECT * FROM user_data WHERE last_name = 'YOUR Name' or '1=1'
    last name이 Your Name인 조건을 주고 user_data라는 테이블에서 모든 값을 출력하겠다는 문인데 , 뒤의 or '1=1' 을 주목하자.
    1=1은 즉 참이다 , or연산은 둘 중 하나만 맞아도 참을 반환함을 이용하여 last_name이 Your name이 아니여도 모두 출력한다.

2) Blind SQL Injection - 쿼리 결과 여부 판단
ex1) http://www.xxx.com/page.php?id=5 and 1=1

php?id=5를 게시판 5번째 글을 클릭했을때의 소스로 생각해보자 , 
공격자는 기존 url 뒤에다가 1=1(참)을 통해 and연산을 진행한다 , and연산은 두 값 모두 참일 경우에만 참을 반환한다.
즉 , 5번째 게시글이 존재할테니 id=5 값 또한 참이되고 1=1 또한 참이니 5번째 게시글을 브라우저에 뿌려준다.


3) Union SQL Injection    -    이중쿼리

ex)    http://www.site.com/news.php?id=5 union all select top 1 table_name from information_schema.tables
   
    news.php?id=5 또한 쿼리이고 , union으로 묶어 뒤에 나오는 select from 또한 쿼리다.

실습은 워게임이나 webgoat를 통해 해보면 된다.




'Hacking & Security > Web' 카테고리의 다른 글

운영체제 명령 실행 취약점 진단  (1) 2019.03.03
웹 취약점 진단제거 가이드  (0) 2019.03.03
웹 취약점 분류  (0) 2017.11.27
HTTP Request ~ HTTP Response  (0) 2017.11.27
웹 기초 지식 2  (0) 2017.11.24