본문 바로가기
web hacking

SQL Injection

by Jueun7 2023. 9. 9.

SQL은 엄청난 장점이 있는 언어이다.

db에서 데이터를 선택하고, 추출하고, 넣고, 지우고... 데이터를 분석하고 이용할때 사용하는 언어가 SQL이다.

SQL은 DB 내용들을 손쉽게 관리할 수 있는 강력한 언어이다.

 

SQL은 크게 3가지의 형태로 나누어지는데, DDL, DML, DCL이 있다.

 

DDL에서 쓰는 대표적 예시는

# 테이블이나 DB를 새로 만든다
CREATE;
	CREATE TABLE Customers (
    CustomerID INT PRIMARY KEY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50),
    Email VARCHAR(100)
); # 이렇게 새로운 테이블을 생성할 수 있다.


# 테이블이나 DB의 속성을 바꾼다
ALTER;
	ALTER TABLE Board ADD createdDate date; # 이렇게 테이블에 컬럼을 추가할 수 있다.

# 테이블이나 DB를 삭제한다
DROP;
	DROP TABLE Board; # 이렇게 테이블을 드랍시킬수도 있다

이 정도의 명령어가 있다.

 

 

DML도 살펴보면

# 테이블에 데이터 삽입하기
INSERT;
	INSERT INTO 
  Board(boardTitle, boardContent, createdDate) 
Values(
  'Hello', 
  'Gaon',
  Now()
);

# 데이터 업데이트하기
UPDATE
	UPDATE Board 
    SET boardContent='DreamHack!' 
    Where idx=1;
    
# 데이터 조회하기
SELECT
	SELECT *
    FROM Board
    WHERE id=1;
    
    
# 데이터 삭제하기
DELETE
	DELETE From
    Board
    WHERE
    id = 1;

 

 

로그인 WHERE 우회하기

보통 로그인을 할 때 사용하는 SQL 구문을 봐보자

select * from user
where uid='{uid}' and upw='{upw}';

GET이나 POST 요청으로 입력받은 값을 uid와 upw에 넣어서 SQL 구문을 완성시키고 DB에서 조회한다.

 

SQL은 ' 문자로 문자열을 구분한다. 이때 사용자 입력값에 '를 넣어서 WHERE 문을 탈출해 새로운 구문을 작성할 수 있는 취약점이다.

 

예를 들어서 uid에 '로 문자열을 이스케이프해서 upw를 무시하려면

' or 1 = 1 -- -

이런식으로 uid에 값을 넣고 SQL문을 확인해보면

select * from user
where uid='' or 1 = 1 -- -' and upw='{upw}';

해당 형식으로 WHERE 문이 완성되어서 upw 입력문이 주석처리되어 로그인 인증을 우회 할 수 있다.

 

 

물론 문자열 탈출을 안하고도 SQLi 할 수 있다.

select * from board where post_id=100 or 1=1;

select * from board where post_id=1; drop table board -- -;

이런식으로 파일 조회할 시 정수형으로 SQL 구문에 삽입된다면 문자와 같이 넣어서 SQLi 가능하다.

 

 

 

UNION 활용하기

SQL엔 UNION이라는 문법이 있다. UNION은 SQL문에서 서브쿼리를 사용하여 조회를 할 수 있게 해주는 문법이다.

예시를 들어보면,

# ORGIN SQL
Select uid from user_table where uid='' and upw=''
# UID
' OR 1=1/*
# UPW
*/ union select upw from user_table --
# SQL INJECTION
Select uid from user_table where uid='' OR 1=1/*' and upw='*/ union select upw from user_table --'

해당 형식으로 입력이 되어서 다른 테이블이나 쿼리등을 조회할 수 있다.

 

 

'web hacking' 카테고리의 다른 글

ejs 3.1.6 SSTI 취약점 (CVE-2022-29078)  (1) 2023.09.30
내 web shell은 어디에...  (0) 2023.09.07
file upload 대응은 이게 정석일껄요...?  (0) 2023.09.04
HTML/CSS Injection  (0) 2023.07.28
정보빼가는 SQLi 와 SQLMAP  (0) 2023.07.24