SQL(Structured Query Language)

RDBMS의 데이터를 정의하고 질의, 수정등을 하기 위해 고안된 언어.

 

Injection 공격

이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점

 

SQL Injection

SQL 구문에 임의 문자열을 삽입하는 행위. → 조작된 쿼리로 인증을 우회하거나 데이터 베이스 정보 유출 가능.

SELECT * FROM user_table WHERE uid='admin' or '1' and upw='';

1. uid = admin admin 결과 반환

2. 이전식이 참이고 upw가 없는 경우 → 아무런 결과 반환 안함.

=> uid가 admin데이터를 반환하기 떄문에 관리자 계정으로 로그인 가능

 

* 주석 : --, #, /**/

 

Blind SQL Injection

DBMS가 답변 가능한 형태로 질문하면서 질의 결과를 이용자가 화면에서 직접 확인하지 못할 때 참/거짓 반환 겨로가로 데이터를 획득하는 공격 기법.

substr(string, position, length)
substr('abcd', 1, 1) = 'a'

# 첫 번째 글자 구하기 (아스키 114 = 'r', 115 = 's')
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=114-- ' and upw=''; # False
SELECT * FROM user_table WHERE uid='admin' and ascii(substr(upw,1,1))=115-- ' and upw=''; # True

 

Blind SQL Injection 공격 스크립트

- requests 모듈

HTTP통신을 위한 파이썬 모듈 → HTTP 요청, 응답, 확인 가능


 

simple_sqli

SQL Injection 공격 쿼리문

1. ID : admin" --

2. ID : admin

    PW : --" or userid="admin

3. ID : " or 1 LIMIT1,1--


NoSQL Injection

MongoDB경우 : 이용자의 입력값에 대한 타입 검증이 불충분할 때 발생.

→ 이용자의 입력값에 대해 타입을 검증하지 않을때 오브젝트 타입의 값을 입력할 수 있음.

$ne (not equal)연산자는 입력한 데이터와 일치하지 않는 데이터 반환함. 공격자는 계정 정보를 몰라도 $ne사용해서 정보 알아낼 수 있음.

 

Blind NoSQL Injection

MongoDB 경우

  • $expr : 쿼리 언어 내에서 집계 식 사용
  • $regex : 지정된 정규식과 일치하는 데이터 조회

  • $text : 지정된 텍스트 검색
  • $where : JavaScript 표현식을 만족하는 문서와 일치

Mango

string외에 다양한 형태의 object도 쿼리로 전달될 수 있음.

 

참고 사이트

https://velog.io/@silvergun8291/Dreamhack-Mango

https://goseungduk.tistory.com/62

 

잘 모르겠다ㅏㅏ


+ Recent posts