본문 바로가기
공부/해킹 과제

SQL

by TILDA_16 2023. 4. 14.

SQL

 

자료를 처리하는 용도로 사용되는 구조적 데이터 질의 언어

 

DB한테 데이터를 처리(가져와라, 수정해라, 추가해라 등)해라 하는 언어

 

SELECT

 

테이블에 있는 데이터를 조회할 때 사용하는 명령어

 

select [컬럼 이름] from [테이블 이름]

 

DB는 많은양의 데이터가 들어있어서 전부 조회하지 않고 조건을 걸어준다.

 

select [컬럼 이름] from [테이블 이름] where (컬럼이름 = 데이터)

 

로그인 인증 과정

 

로그인 인증은 식별과 인증이라는 과정이 필요하다.

 

식별 : 많은 데이터 중에서 특정한 데이터를 가려내는 것 / 식별정보 : ID(중복 X)

 

인증 : 그 사람이 맞는지 확인 / 인증정보 : PW

 

1) 식별과 인증 동시 진행 CASE

 

member라는 테이블이 있고 아이디와 비밀번호를 입력받고 로그인을 하면 DB에 이러한 질의를 한다.

 

select * from member where id = '입력한 ID' and pw = '입력한 PW'

 

위의 조건에 부합하면 로그인이 성공하고 틀리면 실패한다.

 

2) 식별과 인증 분리 진행 CASE

 

select pw from member where id = '입력한 ID' and pass = '입력한 PW'

 

pw와 입력한 PW가 일치하면 로그인 성공하고 틀리면 로그인에 실패한다.

 

1)과 2)는 둘 다 안전하다. 하지만 SQL Injection 취약점이 있으면 위험하다.

 

SQL Injection

 

SQL 질의문을 삽입하는 공격

 

질의문을 삽입해서 데이터를 추출하거나 인증을 우회하거나 데이터를 변조시킨다.

 

select * from member where id = '' and pw = ''

 

이러한 질의문이 있을 거고 우리는 ''에 아이디와 비밀번호 대신에 내가 로그인하고 싶은 계정을 넣어볼 거다.(비밀번호는 아무거나 넣음)

 

    주석을 사용 : admin'#

 

        select * from member where id = 'admin'#' and pw = '1231423124'

 

        #이하가 주석처리돼서 select * from member where id = 'admin'만 실행이 된다.

 

    or을 사용 : admin' or '1'='1

 

        select * from member where id = 'admin' or '1'='1' and pw = '1231423124'

 

        연산자 우선순위에 의해서 and가 먼저 진행되고 그다음 or가 진행된다.

 

        select * from member where id = 'admin' or ('1'='1' and pw = '1231423124')

 

        따라서 and를 실행하면 거짓이 되고 or은 실행해도 참이 된다.

 

    or을 사용 : admin' or '1'='1'#

 

        select * from member where id = 'admin' or '1'='1'#' and pw = '1231423124' 

 

        #이하는 주석처리가 되고 select * from member where id = 'admin' or '1'='1'만 실행이 된다.

 

    union을 사용 : select ~~~~ union select ~~~~

 

        union은 데이터를 연결해서 출력할 수 있고 select문을 2개를 쓸 수 있게 해 준다.

 

        union은 사용할 때 컬럼의 개수를 알고 있어야 한다.

 

        예를 들어 컬럼의 개수가 4개인 Table이 있으면

 

        X' UNION SELECT '1234','mario','5555','5555'#

 

        이런 식으로 컬럼의 개수를 맞추면 된다.

 

SQL Injection을 사용할 때는 막연하게 주석을 이용하거나 막 집어넣지 말고

 

사이트의 구조가 어떻게 돼있는지 생각하면서 집어넣는 게 좋다.

'공부 > 해킹 과제' 카테고리의 다른 글

Error Based SQL Injection  (0) 2023.04.21
Union SQL Injection  (0) 2023.04.21
로그인 CASE  (0) 2023.04.18
인증 우회 케이스  (0) 2023.04.10
로그인 인증  (0) 2023.04.07