웹 해킹

[OWASP] SQL INJECTION(개념, 원리, 공격구문)

yo0_ung 2022. 4. 29. 16:16

OWSAP란?

웹 애플리케이션 보안 취약점 목록이다. 

출처 https://owasp.org/

면접 볼 때(특히 관제), 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