[드림핵/웹해킹] Background: Non-Relational DBMS

2024. 1. 11. 13:48· 보안 스터디/웹 해킹
목차
  1. 프롤로그
  2. NRDMBS(NoSQL)
  3. MongoDB
  4. Redis
  5. CouchDB
  6. 에필로그
728x90
반응형

프롤로그

simple_sqli 워게임 문제에서 Bilnd SQL Inejction 해볼려고 했는데 안 됐다;

자꾸 requests 모델이 없다는데 파이썬 새 버전 설치에 별 거 다해봤는데 안 돼서 그냥 비관계형 DBMS 로 넘어왔다.

 

 

NRDMBS(NoSQL)

RDBMS의 단점은 저장해야하는 데이터가 많아지면 용량의 한계에 다다를 수 있는 것인데, 이를 해결하기 위해서 나왔다.

RDBMS는 SQL를 사용해 데이터를 조회 및 추가 그리고 삭제할 수 있었는데, NoSQL은 SQL를 사용하지 않고 복잡하지 않은 데이터를 저장해 단순 검색 및 추가 검색 작업을 위해 매우 최적화된 저장 공간이 큰 특징이고 관계형과의 차이점이 있다.

관계형은 SQL이라는 정해진 문법으로 데이터를 저장하기에 SQL이 필수인데, NoSQL은 Redis, Dynamo, CouchDB 등 다양한 DBMS가 존재하기에 각각의 구조와 사용문법을 익여야한다.

 

 

MongoDB

MongoDB는 JSON 형태인 도큐멘트(Document)를 저장함.

- 스키마를 따로 정의하지 않아 각 컬렉션에 대한 정의가 필요하지않음

- JSON 형식으로 쿼리 작성 가능

- _id 필드가 Primary Key역할을 함

위 세 가지 특징이 있음.

$ mongosh
> db.user.insertOne({uid: 'admin', upw: 'secretpassword'})
{ acknowledged: true, insertedId: ObjectId("5e71d395b050a2511caa827d")}
> db.user.find({uid: 'admin'})
[{ "_id" : ObjectId("5e71d395b050a2511caa827d"), "uid" : "admin", "upw" : "secretpassword" }]

이런 예시가 있다고 함.

 

기존 SQL에서 

SELECT * FROM inventory WHERE status = "A" and qty < 30;

이렇게 작성하던 거를 mongoDB 에서는

db.inventory.find(
  { $and: [
    { status: "A" },
    { qty: { $lt: 30 } }
  ]}
)

이렇게 된다고 한다.;

그냥 새로운 언어를 다 배우는 느낌이다.

주요 연산자로는

Comparison 비교 
$eq 지정한 값과 같은 값 찾기(equal)
$in 배열 안의 값들과 일치하는 것 찾기(in)
$ne 지정한 값과 같지 않은 값 찾기(not equal)
$nin 배열 안의 값들과 일치하지 않는 값 찾기(not in)

 

Logical 논리
$ and 논리적 AND
$ not 쿼리 식 효과 반전
$ nor 모두 만족하지 않는 거 반환
$ or 하나만 만족

 

Element  
$exists 지정한 필드가 있는 문서 찾기
$type 지정한 필드가 지정된 유형의 문서 선택

 

Evaluation  
$expr 쿼리 언어 내에서 집계 식 사용
$ regex 지정된 정규식과 일치하는 문서 선택
$text 지정된 텍스트 검색

 

 

db.account.find(
  { user_id: "admin" },
  { user_idx:1, _id:0 }
)
db.account.insertOne(
  { user_id: "guest",user_pw: "guest" }
)
db.account.remove(
  {user_id: "guest"}
)
db.account.updateOne(
  { user_idx: 2 },
  { $set: { user_id: "guest2" } }
)

대충 이런식으로 쓴다.

조회 find, 추가 insertOne, 삭제 remove 업데이트 updateOne (이때는 set도 있음)

 

 

Redis

키-값의 쌍을 가진 데이터를 저장. 메모리 기반의 DBMS. 메모리를 사용하여 데이터를 저장하고 접근하기에 다른 DBMS보다 훨씬 빠르다. (캐싱 용도)

 

  • https://redis.io/commands
 

Commands

Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker

redis.io

공식 문서 안에 대부분 있다고 함.

GET : 조회

SET : 데이터 추가

DEL : 데이터 삭제

EXISTS : 데이터 존재하는가

 

 

CouchDB

MongoDB와 같이 JSON  형태인 Document 저장한다. 웹 기반 DBMS 로 , REST API 형식으로 요청 처리한다.

POST, GET, PUT, DELETE가 있다

$ curl -X PUT http://{username}:{password}@localhost:5984/users/guest -d '{"upw":"guest"}'
{"ok":true,"id":"guest","rev":"1-22a458e50cf189b17d50eeb295231896"}

$ curl http://{username}:{password}@localhost:5984/users/guest
{"_id":"guest","_rev":"1-22a458e50cf189b17d50eeb295231896","upw":"guest"}

이렇게 쓴다고 함.

 

이렇다고 하네요.

공식

  • https://docs.couchdb.org/en/latest/api/index.html
 

1. API Reference — Apache CouchDB® 3.3 Documentation

© Copyright 2024, Apache Software Foundation. CouchDB® is a registered trademark of the Apache Software Foundation. Revision 50e1d165.

docs.couchdb.org

 

 

에필로그

드림핵에서 정확히 어떤 언어를 써서 해킹을 할지는 다음장을 봐야할 것 같음.

결국엔 보안쪽은 모든 분야를 다방면으로 알아야 할 수 있구나;

728x90
반응형
저작자표시 비영리 (새창열림)

'보안 스터디 > 웹 해킹' 카테고리의 다른 글

[드림핵/워게임] Mango (웹 해킹)  (0) 2024.01.12
[드림핵/웹해킹] ServerSide: NoSQL Injection  (3) 2024.01.11
[드림핵/워게임] simple_sqli -1(웹해킹)  (1) 2024.01.08
[드림핵/웹해킹] ServerSide: SQL Injection  (0) 2024.01.07
[드림핵/웹해킹] Background: Relational DBMS  (0) 2024.01.07
  1. 프롤로그
  2. NRDMBS(NoSQL)
  3. MongoDB
  4. Redis
  5. CouchDB
  6. 에필로그
'보안 스터디/웹 해킹' 카테고리의 다른 글
  • [드림핵/워게임] Mango (웹 해킹)
  • [드림핵/웹해킹] ServerSide: NoSQL Injection
  • [드림핵/워게임] simple_sqli -1(웹해킹)
  • [드림핵/웹해킹] ServerSide: SQL Injection
성밍쟁
성밍쟁
성밍쟁 공붕방
성밍쟁
너드인의 밤
성밍쟁
전체
오늘
어제
  • 분류 전체보기 (182)
    • 일상 (1)
    • 스펙업 (7)
      • 학회 (0)
      • 멋쟁이사자처럼 (2)
      • 2024 winter-study (5)
    • 코딩테스트 - 백준 (9)
    • 보안 스터디 (56)
      • 시스템 해킹 (10)
      • 리버스 엔지니어링 (0)
      • 웹 해킹 (38)
      • 암호학 (8)
    • bandit (15)
    • 웹 개발 (11)
    • 머신러닝 (0)
    • 데이터베이스 (9)
    • KnockOn (72)
    • DevOps (2)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 드림핵
  • /bin
  • 1074
  • 11656
  • 1193
  • 2563
  • 3Des
  • 9613
  • AES
  • Alias

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
성밍쟁
[드림핵/웹해킹] Background: Non-Relational DBMS
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.