No SQL Database
비 관계형 데이터베이스
비 관계형 데이터베이스는 RDBMS와 다르게 SQL을 사용하지 않습니다. 또한 저장하는 방식이 테이블의 row, column 형태로 저장하지 않고 Collection , Document , Key : Value 형태로 데이터를 저장합니다.
비관계형 데이터베이스의 종류는 MongoDB, Redis , CouchDB.. 등이 있습니다. 일단 MongoDB, Reids , CouchDB의 문법을 알아보도록 하겠습니다.
MongoDB
MongoDB는 Document형태로 데이터를 저장합니다. 데이터의 형식이 JSON이라 쿼리를 질의할 때도 JSON방식으로 질의할 수 있습니다.
MongoDB의 기본 문법
- SELECT
db.example.find({}) //모두 질의
db.example.find({ //조건 질의
username : 'admin'
})
- INSERT
db.example.insert({
username : "guest",
userpassword : "password",
)}
- DELETE
db.example.remove() // 모두 제거
db.example.remove({ // 조건 제거
username : 'guest',
)}
- UPDATE
db.example.update({
password : "1234",
},
{
{
$set: { username : 'guest' } // MongoDB 연산자
}
)
연산자
Operator | Description |
$eq | equal |
$in | 일치하는 값을 찾는다. |
$ne | not equal |
$nin | 일치하지 않는 값을 찾는다. |
$and | AND |
$not | 쿼리식과 일치하지 않는 값을 찾는다. |
$nor | NOR, OR의 반대연산 |
$or | OR |
$eixsts | 지정된 필드가 있는 문서를 찾는다. |
$type | 지정된 필드가 해당 유형인 문서를 찾는다. |
$expr | 집계식 |
$regex | 정규식 |
$text | 텍스트 |
Redis
Redis도 key - value형태로 데이터를 저장하는 형태는 동일합니다. 다른점은 메모리를 이용하여 데이터를 저장하고 , 접근하기 때문에 속도가 빠르다는 장점이 있습니다.
명령어
기본 명령어 형태는 아래와 같습니다.
[OPERATOR] KEY VALUE
Instruction | 구조 | Description |
GET | GET key | 데이터 조회 |
MGET | MGET key... | 여러 데이터 조회 |
SET | SET key value | KEY에 데이터 추가 |
MSET | MSET key value [key value...] | KEY에 여러 데이터 추가 |
DEL | DEL key | 데이터 삭제 |
EXISTS | EXISTS key [key...] | 데이터 유무 확인 |
INCR / DECR | INCR key / DECR key | ++1 , --1 |
CouchDB
CouchDB는 REST API형식으로 작동되는 데이터베이스 입니다. REST API는 간단하게 말해서 URI기준으로 HTTP Method를 사용해서 연산을 수행하는 방식입니다. 예시는 다음과 같습니다.
curl -X PUT http://URL/database/ -d [DATA]
curl은 HTTP요청을 보낼 수 있는 Tool입니다. "PUT"이라는 헤더를 통해 "database"라는 곳에 DATA를 업데이트할 수 있습니다. 이와 같이 CouchDB는 REST API 방식을 가지고 있습니다.
명령어
- POST : 새로운 Record추가
- GET : Record 조회
- PUT : Record 업데이트
- DELETE : Record 삭제
URL
PATH | |
/ | 메타 정보를 반환 |
/_all_dbs | 데이터베이스 목록을 반환 |
/_utils | 관리자 페이지로 이동 |
/db | 지정된 데이터베이스에 대한 정보를 반환 |
/[db]/_all_docs | 지정된 데이터베이스에 포함된 모든 Document를 반환 |
/[db]/_find | 지정된 데이터베이스에서 JSON 쿼리에 해당하는 모든 Document를 반환 |
❗ 저작권
'Hacking > Web' 카테고리의 다른 글
[Web Hacking] DNS rebinding (0) | 2022.07.30 |
---|---|
[Web Hacking] Missconfiguration DBMS (0) | 2022.07.26 |
[Web Hacking] SSRF (0) | 2022.07.25 |
[Web Hacking] Command Injection (0) | 2022.07.24 |
[Web Hacking] No SQL Injection(Mongo DB) (0) | 2022.07.23 |