IT 그리고 정보보안/Knowledge base

SQL (Structured Query Language)

plummmm 2021. 4. 16. 04:41
반응형

데이터 베이스?? 라는 말을 들어봤는지 모르겠다.

간단히 설명하자면, 우리가 필요한 데이터들을 아주 세밀하고 고도화된 구조로 집약시켜

수정, 검색 등이 용이하도록 만든 데이터의 집합체라고 보면 된다.

 

우리가 사용하는 웹 사이트들중 데이터 베이스를 사용하지 않는 곳은 단 한군데도 없다.

왜? 회원 정보 관리, 게시물 관리 등 이런 것들을 모두 데이터베이스에서 하기 때문이다.

 

데이터베이스는 종류가 어마어마하게 많지만, 우리가 자주 보고 공부할 것들은 3가지 가량으로 압축된다.

MySQL, MSSQL, ORACLE 이정도가 되겠다.

 

 

위 세가지 같이 데이터 베이스를 관리하는 시스템을 

데이터 베이스 관리 시스템(DBMS :Data Base Management System)이라 한다.

 

그럼. DB에 관한 설명은 이쯤하고, SQL이 무엇인지 알아보자.

Structured Query Language 의 약자로, 구조화된 쿼리 언어 라는 말이다.

DBMS를 사용하기 위해 만들어진 특수한 목적의 언어이다. 데이터베이스의 자료에 대한 검색과 수정, 생성과 삭제 등의

작업을 하기위한 대화식 프로그래밍 언어이다.

 

SQL 인젝션 공부를 하면서 MySQL과 MS-SQL을 다룰텐데,

공부하면서 실제 Query문들을 다루면서 차근차근 알아보겠음.

 

일단은 데이터베이스를 관리하는 시스템, DBMS에는 오라클, MySQL, MS-SQL이 있고,

얘네들을 이용하여 작업을 할 때 사용하는 언어가 SQL 이라는 것을 알아두자. 

 

 

기초적인 SQL Query문

SQL이 무엇인지 알았으니 이제 데이터베이스를 제어하는 쿼리문에 대하여 공부를 해봅시다.

거추장스럽게 DB프로그래밍 언어라는 말들을 쓰던데, 

DB 설계 쪽으로 종사하시는 분들에게는 맞는말이지만,

우리는 생성되어 있는 DB에 장난을 치기 때문에 제어문이라고 개념을 잡아 두자

 

DB에서 우리가 하는 작업은 총 4가지로 나눌 수 있다.

검색, 수정, 생성, 삭제

 

검색은 말 그대로 검색. 기본적으로 하는 작업들이 검색이다.

( e.g. 게시물 열람, 로그인 등)

수정은 DB의 내용을 수정하는 것.

( e.g. 회원 정보 수정 등)

생성은 DB에 새로운 내용을 생성하는 작업.

( e.g. 회원 가입 등)

삭제는 DB에 있는 내용을 삭제하는 작업이다.

( e.g. 회원 탈퇴 등)

 

처음에 SQL 설명할 때 MySQL, MS-SQL, Oracle 등 여러가지 DBMS가 있다고 설명했다.

일단 가장 흔히 많이 쓰이는 MySQL 을 이용하여 쿼리와 인젝션에 대하여 공부하겠다.

MySQL로 개념을 잡고 후에 MS-SQL을 하며 내용이 다른 부분을 비교하는 식으로 할거임.

 

그럼 무작정 MySQL로 하냐??? 노노 일단 설치부터 한다.

설치하기 앞서 넷프레임워크 4.0이 선행적으로 설치되어 있어야 한다.

 

http://dev.mysql.com/downloads/ 링크를 타고 가서 "Mysql Community Server"탭을 클릭하여 알맞는 것을 받고 다운한다. 

그리고 설치가 끝나고 http://dev.mysql.com/downloads/gui-tools/5.0.html 에서 gui tool을 받는다.

(우리가 쿼리문 공부를 하기위해 쿼리 브라우저라는 툴을 이용해야 하기 때문에 받아주셈.)

 

다 받고 쿼리 브라우저를 실행한다.

 

 

최초에 실행하면 설정을 해줘야 한다.

호스트는 127.0.0.1  (포트는 mysql 기본포트 3306을 쓴다.)

유저이름 : root

패스워드 : apmsetup (초기 비밀번호니까 꼭 변경하기 바람.)

그리고 스키마를 생성해야 한다. 

스키마는 DB의 속성을 나타내는 것이라고 보면된다.(누가 만들었는지 이름이 뭔지 등을 식별하기위한.)

아무거나 적어주자.

 

 

이 화면이 나타나면 올바르게 실행된 것이다.

 

하나씩 쿼리문에 대해 공부해보겠음.

 

먼저 DB조작하기 이전에 내가 무슨 스키마를 사용할 것인지 정의한다.

무슨 스키마?? 라기 보단 어떤 데이터베이스를 쓸것인가. 그렇게 생각하면됨.

 

use mysql;

를 입력하면 mysql 데이터베이스를 사용하게 된다.

쿼리문은 항상 뒤에 세미콜론(;)을 입력해야 한다.

 

그뒤에 이제 테이블을 생성해야 한다. 쉽게 말해서 

DB에 있는 값을 담는 '표'라고 보면된다.

그럼 테이블을 만들어보자.

 

create table [테이블명] ( [값이름1] [값속성1], [값이름2] [값속성2], [값이름3], [값속성3]);

이런식으로 정의한다. 예문을 보아야 당신들이 이해를 하지 싶다.

create table test(id int, name varchar(10), passwd varchar(10));

이렇게 쓴다. 속성에 대한 것은 설명 따로 안해준다. 프로그래밍 공부를 조금이라도 한사람들이 볼거라고 생각한다.

 

create 문을 이용하여 테이블이라는 DB값들의 '틀'을 만들었다..

그럼 이제 그 틀속에 값을 집어넣어 보자. insert라는 명령문을 쓴다.

 

insert into [테이블명] ( [값이름1], [값이름2], [값이름3] ) values ([값1], [값2], [값3]);

이 또한 예문을 통해서 보자.

insert into test (id, name, passwd) values (1, "woo", "woo1");

문자열값에는 항상 더블쿼터를 써주어야 한다는 사실을 잊지말자.

 

그럼 이제 값도 집어 넣었겠다. 검색을 한번 해보자.

 

select [칼럼 또는 '*'] from [테이블명] where [조건];

간단히 설명부터 하면 

from 테이블명 = '어떤 테이블에서??'

where 조건 = '이러한 조건에 부합하는' (e.g. where id=2)

 

예문은 select * from test where id=1;

정도가 되겠따.

예문을 차례대로 치고나면 결과가 이래나온다.

 

 

자.. 이제 눈을 다른 방향으로 돌려보자.

우리는 웹 어플리케이션 해킹을 공부하고있다.

 

그럼 select 문에서 곰곰히 생각해보자. 내 아이디는 알고 있는데..

테이블의 다른 아이디와 비밀번호 값들도 보고싶다..

그럼 어떻게 조작하면 다 볼수 있을까.

 

select * from test where id=1 or 1=1 (참조건);

을 하면 조건절이 or연산으로 참이 되면서 where문이 유명무실해진다. 

그러면 select * from test 문장만 동작할거임.

하여 테이블의 모든 값들을 열람할 수 있다.

 

이것이 SQL 인젝션의 가장 기본적인 형태이다.

인수분해를 하기위해 구구단을 외운다는 개념?? 너무 심했나. 하여튼

중요함. 조금은 인젝션이 무엇인지 감이 올거라고 생각함.

 

다음 부터 이제 여러가지 SQL 인젝션 기법들을 포스팅하겠음.

 

반응형

'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글

CWE/SANS TOP 25  (0) 2021.04.16
OWASP top 10  (0) 2021.04.16
HTTP 쿠키 (Cookie) & 세션 (Session)  (0) 2021.04.16
웹개발 언어에 대한 정리  (0) 2021.04.16
Base64 Encoding  (0) 2021.04.16