SQL Injection에 대해 알아보기 위해서는 DB를 이해해야 한다.
데이터 : 현실 세계에서 존재하는 여러가지 정보
ex) 친구 이름 , 주소 ..etc
데이터베이스 : 데이터를 효율적으로 관리하기 위해 분리한 정보
데이터베이스는 테이블로 이루어져있고 테이블은 필드로 이루어져있다.
DLL 언어 : 데이터베이스의 테이블을 정의하고 작성 ( create(생성) , alter(변경) , drop(삭제) )
DML 언어 : 데이터베이스를 추가, 갱신, 삭제 및 검색 수행 ( select , insert , update , delete )
DCL 언어 : 데이터베이스의 보안과 데이터의 연속성을 유지 ( grant(권한할당) , revoke(권한제거) , commit(데이터 변경 승인 ) , rollback(데이터 변경 취소 ) )
ex) 테이블 이름 : 상품
상품번호 |
상품이름 |
가격 |
1 |
Mp3 |
100,000 |
2 |
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 |