[WebHacking] NoSQL injection
NoSQL
NoSQL 은 비관계형 데이터베이스를 의미한다. RDBMS는 SQL이라는 정해진 문법을 통해 데이터를 저장하기 때문에 한 가지의 언어로 다양한 DBMS를 사용할 수 있다. 하지만, NoSQL 은 다양한 DBMS가 존재하기 때문에 각각의 구조와 사용 문법을 익혀야 한다. 대표적인 NoSQL은 Redis, Dynamo, CouchDB, MongoDB 등이 있다.
MongoDB
MongoDB는 JSON 형태의 document를 저장한다. $문자를 이용해 연산자를 사용한다는 특징이 있다.
Comparison
$eq | 지정값과 같은 값을 찾는다. |
$in | 배열 안의 값들과 일치하는 값을 찾는다. |
$ne | 지정된 값과 같이 않은 값을 찾는다. |
$nin | 배열 안의 값들과 일치하지 않는 값을 찾는다. |
Logical
$and | 논리곱. 각각의 쿼리를 모두 만족하는 문서 반환한다. |
$not | 논리부정. 쿼리 식과 일치하지 않는 문서를 반환한다. |
$nor | 논리 NOR(Not OR). 각각의 쿼리를 모두 만족하지 않는 문서를 반환한다. |
$or | 논리합. 각각의 쿼리 중 하나 이상 만족하는 문서가 반환된다. |
Element & Evaluation
$exists | 지정된 필드가 있는 문서를 찾는다. |
$type | 지정된 필드가 지정된 유형인 문서를 선택한다. |
$expr | 쿼리 언어 내에서 집계식을 사용할 수 있다. |
$regex | 지정된 정규식과 일치하는 문서를 선택한다. |
$text | 지정된 텍스트를 검색한다. |
기본 문법
SELECT | db.name.find() db.name.find({id:"admin"}) |
DELETE | db.name.remove() db.name.remove({id:"admin"}) |
UPDATE | db.name.update({user_id=2}, {$set : {id:"admin"}}) |
Redis
Redis는 키-값의 쌍을 가진 데이터를 저장한다. 다른 데이터베이스들과 다르게 메모리 기반이라는 점이 가장 큰 특징이다. 따라서 읽고 쓰는 작업이 다른 DBMS보다 훨씬 빠르다. 그래서 다양한 서비스에서 임시 데이터를 캐싱하는 용도로도 사용된다는 특징이 있다.
CouchDB
MongoDB와 같이 JSON 형태의 document를 저장한다. 웹 기반의 DBMS로 Rest API 형식으로 요청을 처리한다.
NoSQL injection
NoSQL injection은 SQL injection과 공격 목적 및 방법이 매우 유사하다. 두 공격 모두 이용자의 입력값이 쿼리에 포함되면서 발생하는 문제점이다.
특히 MongoDB의 경우 데이터의 입력값에 대한 타입 검증이 불충분할 때 발생한다. 저장되는 데이터의 자료형은 문자열, 정수, 날짜, 실수, 오브젝트, 배열 등이 있다.
몽고DB 타입에 관한 공식 문서이다.
몽고DB를 예시로 설명을 하자.
http:localhost:8000/?data[5678]=1234
data: {'5678','1234'}
type: object
몽고DB는 다음과 같이 사용할 수 있다.
http://localhost:8000/query?id[$ne]=a&upw[$ne]=a
만약 위와 같이 입력이 된다면 어떻게 될까? 공격자는 계정 정보를 모르더라도 쿼리문을 참으로 만들어 정보를 꺼내올 수 있다.
이렇게 기본적인 원리는 SQL injection과 같지만, 새로운 언어를 학습에 그에 대한 쿼리문을 조작하는 것이 NoSQL injection인 것이다.
아직까지 여기 파트는 설명이 부실하다. 내가 NoSQL을 잘 모르기 때문에 앞으로 채워나가겠다.
'Hacking & Security > WebHacking' 카테고리의 다른 글
[WebHacking] SQL Injection (0) | 2022.02.04 |
---|---|
[WebHacking] CSRF (Cross Site Request Forgery) (0) | 2022.02.03 |
[WebHacking] XSS (Cross-Site-Scripting) (0) | 2022.02.02 |
[WebHacking] Dreamhack 커리큘럼 (0) | 2022.02.02 |