Lab: Detecting NoSQL injection

Lab: Detecting NoSQL injection

https://portswigger.net/web-security/nosql-injection/lab-nosql-injection-detection

 

Lab: Detecting NoSQL injection | Web Security Academy

The product category filter for this lab is powered by a MongoDB NoSQL database. It is vulnerable to NoSQL injection. To solve the lab, perform a NoSQL ...

portswigger.net


NoSQL Injection 취약점

 

해당 실습은 MongoDB NoSQL 데이터베이스 기반

출시되지 않은 제품이 표시되도록하는 NoSQL Injection을 수행

 

(1) LAB에 접속하여 카테고리를 클릭하고 패킷을 확인합니다. 

=> ?category=Clothing, shoes and accessories

 

(2) category 뒤에 ' 문자를 붙여 요청합니다.

=> 서버오류를 발생시키며 서버 정보 노출

=> Mongo DB 사용 확인

 

(3) DB를 우회하기 위해 공격을 시도합니다. (인코딩은 Ctrl+U)

' && 1==1 (실패)
' && '1' == '1 (실패)
' ❘❘ 1==1 (실패)
' ❘❘ '1' == '1 (성공)

=> 모든 제품 노출 확인

=> 전체 공격 구문 : 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 대응방안

  • 화이트리스트 방식으로 허용되는 문자 목록을 사용하여 사용자 입력을 검증
  • 사용자 입력을 쿼리에 직접 사용하는 대신 매개변수화된 쿼리를 사용하여 사용자 입력을 삽입
  • 운영자 주입을 방지하기 위해 허용되는 키의 허용 목록을 적용

 

[참고] https://portswigger.net/web-security/nosql-injection