Injection이란 "주입하다"라는 뜻으로 사용자 입력 값 공격 구문을 넣어 악의적인 행위를 하는 취약점이다.
공격 구문에 어떤 것을 넣는지에 따라 취약점이 달라진다.
OWASP TOP 10에 있는 Injection은 SQL Injection뿐만 아니라, OS, LDAP, XML, XPATH..등 모든 인젝션을 포함한 것이다.
그 중 SQL Injection이 압도적으로 발생한다.
OS Command Injection : 시스템 명령을 삽입할 수 있는 공격으로 가장 위협적이지만 시스템 기능이 많지 않기 때문에 취약점이 발견될 확률은 낮다.
LDAP : 네트워크 상의 자원을 찾을 수 있게 하는 프로토콜
XML : 데이터를 효율적으로 주고 받을 수 있게 하는 마크업 언어, json이 나오면서 사용빈도가 많이 줄었다.
XPATH : 요소, 속성을 찾기 위한 경로 지정 언어라고 볼 수 있다.
SQL Injection
Structured Query Language : 구조화된 질의 언어, 관계형 데이터베이스에서 데이터를 효율적으로 관리하기 위해서 설계된 특수 목적의 언어
SQL Injection : SQL 구문을 삽입하여 비정상적인 행위를 하는 공격
SQL Injection의 종류
1. 인증 우회
2. 데이터 조회(조작)
3. 시스템 명령
select * from emp where id='admin' and pw='' or 1=1 #'
select * from emp where id='admin' and pw=''or '1'='1'
1
SQL Injection (intro)
2
What is SQL?
SQL언어에 대해 물어보는 문제이다.
Employees Table이 있다.
맨 아래 SQL query가 쿼리문을 넣는 곳이고 It is your turn! 부터 문제가 시작된다.
이번 문제는 직원 Bob Franco의 부서를 검색하는 것이다.
3
DML
사용자가 주로 사용하는 기능 CRUD에 대한 설명이 있다.
SELECT : 조회
INSERT : 입력
UPDATE : 수정
DELETE : 삭제
It is your turn!
Tobi barnett 부서를 'Sales'로 변경해라.
4
DDL
데이터 정의 언어
CREATE : 생성
ALTER : 데이터베이스의 전체적인 특성을 수정할 수 있게 한다.
DROP : 삭제
alter table [table] add [column] [type];
alter table [table] drop [column];
phone (varchar(20)) 칼럼을 employees에 추가해라
5
DCL
데이터 제어 언어
GRANT : 권한을 부여
REVOKE : 권한을 제거
UnauthorizedUser에게 권한을 부여해라.
9
SQL Injection을 하는 문제이다.
인증우회 공격을 통해 사용자의 정보를 알 수 있다.
10
이 필드 중 하나만 sql injection에 취약하고 모든 유저를 조회해라.
아무 값을 넣었을 때 Login_Count 쿼리문에 ?가 있는 것을 볼 수 있다.
여기서 ?의 뜻은 prepared Statement의 placeHolder로 안전하기 때문에 User_id가 취약한 것을 알 수 있다.
11
Smith의 고유 번호(TAN)은 3SL99A이다.
모든 사원의 데이터를 조회하라.
Smith에 맞는 TAN을 입력하여 Smith의 정보만 나온다.
12
SQL query chaining (Stack Query)
하나의 이상의 쿼리를 연결할 때 ;를 사용하여 쿼리를 이어지게 하는 방식이다.
SQL 구문 종류
1) In-line Query(Smith' or '1'='1)
2) Terminating Query (Smith' or 1=1 --)
3) Stack Query ( Smith'; delete from user_table)
Tobi와 Bob이 돈을 더 많이 벌고 있다. 자신의 월급을 변경하여 가장 많은 수입을 벌어라.
귀하의 이름 : John Smith, TAN : 3SL99A
Stack Query를 이용하여 TAN뒤에 업데이트 구문을 넣어 SALARY 값을 높였다.
13
여태까지 한 작업들이 기록된 access_log 테이블을 완전히 삭제하라.
select * from access_log where ACTION like '%%'
select * from access_log where ACTION = ' '
검색은 보통 like로 되어 있다.
=일 경우 %가 안되지만 like일 경우 %가 가능하다.
delete [x]
drop [o]