Lab: Detecting NoSQL injection
https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-detection
NoSQL Injection 취약점
해당 실습은 MongoDB NoSQL 데이터베이스 기반
출시되지 않은 제품이 표시되도록하는 NoSQL Injection을 수행
(1) LAB에 접속하여 카테고리를 클릭하고 패킷을 확인합니다.
=> ?category=Clothing, shoes and accessories
(2) category 뒤에 ' 문자를 붙여 요청합니다.
=> 서버오류를 발생시키며 서버 정보 노출
=> Mongo DB 사용 확인
(3) DB를 우회하기 위해 공격을 시도합니다. (인코딩은 Ctrl+U)
=> 모든 제품 노출 확인
=> 전체 공격 구문 : category == 'Clothing, shoes and accessories' || '1' == '1'
NoSQL Injection
NoSQL 데이터베이스는 비관계형 데이터베이스로, 비정형 또는 반정형 데이터를 처리하도록 설계되었습니다. not only SQL 데이터베이스라고 불리는 이유는 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의할 수 있기 때문입니다. RDBMS와 달리 관계형 제약 조건과 일관성 검사가 적으며 확장성, 유연성 및 성능 측면에서 장점을 가지고 있습니다.
NoSQL Injection은 NoSQL DB 환경에서 수행하는 쿼리를 방해하는 취약점입니다. 이 공격을 통해 인증 또는 보호 매커니즘 우회, 데이터 추출 및 편집, 서버에서 코드실행 등을 수행할 수 있습니다. NoSQL Injection은 NoSQL 쿼리 구문을 중단하여 자체 페이로드를 주입할 수 있을 때 발생하는 Syntax Injection, NoSQL 쿼리 연산자를 사용하여 쿼리를 조작할 수 있을 때 발생하는 Operator injection으로 두 가지 유형이 있습니다.
NoSQL Injection 대응방안
- 화이트리스트 방식으로 허용되는 문자 목록을 사용하여 사용자 입력을 검증
- 사용자 입력을 쿼리에 직접 사용하는 대신 매개변수화된 쿼리를 사용하여 사용자 입력을 삽입
- 운영자 주입을 방지하기 위해 허용되는 키의 허용 목록을 적용