[OWASP] SQL INJECTION(개념, 원리, 공격구문)
OWSAP란?
웹 애플리케이션 보안 취약점 목록이다.
면접 볼 때(특히 관제), OWASP TOP10 정도는 알면 좋다.
다 알 필요는 없고, 3가지정도 개념, 원리, 해결방법 알고 있으면 도움이 될 거라고 생각한다.
오늘은 그 중에, SQL INJECTION에 대해 설명해보려고 한다.
SQL인젝션이란?
비정상적인 쿼리문을 이용해 데이터베이스 정보를 탈취하는 공격이다.
특정 함수나 ',=의 문자를 이용해 비정상적인 쿼리가 실행되고, 이를 통해 데이터베이스의 정보를 획득할 수 있게 된다.
1. error based SQL injection
비정상적인 쿼리문을 이용해서 나오는 에러 정보를 이용해 DB 정보를 추측하는 공격
SELECT *
FROM Users
WHERE id='' OR 1=1 --' AND password = 'tt'
공격 구문: ' OR 1=1 --
where절을 모두 참으로 만들고, -- 주석 처리를 통해 password가 무의미해지도록 만든다.
결국, Users 테이블에 있는 모든 정보를 조회할 수 있는 권한을 습득하고, 관리자 계정으로 로그인할 수 있게 된다.
2. union based SQL injection
union이라는 두 개의 쿼리문에 대한 결과를 하나의 값으로 보여주는 구문을 통해, 정상적인 쿼리문에 악의적인 쿼리를 삽입해 원해는 값을 얻어내는 공격이다.
이 때, 테이블 칼럼 수와 데이터 type이 같아야 공격을 성공할 수 있다.
SELECT *
FROM Users
WHERE name LIKE '% 'UNION SELECT id, passwd FROM Users -- INPUT%' OR contents 'INPUT%'
공격 구문: 'UNION SELECT id, passwd FROM Users --
첫 WHERE절에 UNION을 삽입함으로써 탈취하려는 정보를 SELECT로 얻을 수 있다.
3. Blind SQL injection
1) Boolean based SQL
쿼리문을 이용해서 나오는 참/거짓 정보만으로 정보를 획득하는 기법이다.
정상적인 쿼리가 실행되는지, 실행되지 않아 결과를 얻을 수 없는 것인지 등에 대해 판단하기 위해 사용된다.
공격 함수: SUBSRT, ASCII, limit
ex) 자동화 스크립트를 통해 테이블명 등을 한글자 한글자 알아내는 방식
2) Time based SQL
쿼리 결과를 특정 시간만큼 지연시키는 공격으로, 에러/참/거짓 결과값이 나오지 않을 때 시간을 셈으로써 데이터베이스의 구조를 파악할 수 있다.
공격 함수: SLEEP (=BENCHMARK, WAIT)
ex) 공격자가 원하는 정보가 맞다면, sleep(2) 2초동안 지연되도록 하는 방식. 지연 시간을 입력함으로써 공격 쿼리의 참, 거짓을 판별할 수 있다.
SQL injection 공격구문
username=d1' or 1=1 #&password=d1'or 1=1 #&login=
and (select 1 from (select(sleep(3-(if((1=1), 0, 3)))))test)
and 0=0
or 0=0
and+1=0
or+2=1
title=comunion de
select + concat, md5(
등
끝
출처
https://choco4study.tistory.com/10