본문 바로가기
# technic/- web

(MongoDB) NOSQL INJECTION

by ddddh 2016. 10. 13.

이번 '화이트 햇 해킹방어 대회 2016' 예선에 있던 'Web'문제 중 'NOSQL'에 관한 문제를 보았다.

평소 웹에 대한 흥미를 가지지 않아(변명) 'NOSQL'이 무엇인지 몰랐다.

'NOSQL'은 간단하게 말 그대로 SQL을 사용하지 않는다는 뜻이다. 대표적인 예시로 'MongoDB'가 있다.


*자세한 설명은 GOD wiki (https://ko.wikipedia.org/wiki/NoSQL)




'OWASP TOP 10'을 보면 Injection 공격이 수년간 1위를 차지하고 있다.

흔히 우리가 알고 있는 injection 'SQLi'일 것이다.

그렇다면 SQL을 사용하지 않는 'NOSQL'에서 'injection'공격이 안 먹힐까 ??


'MongoDB'를 예제로 연산자 중 '$ne'을 이용하면 injection이 가능하다. ($ne - not equal to 줄임말)

POST 전송으로 ID와 PASSWORD를 전송한다고 가정해보자. ( ID = admin / PW = ddddh )


정상적인 요청

{"username":"admin","password":"ddddh"}


비정상적인 요청

{"username":"admin","password":{"$ne":"abcd"}} # hacked


비정상적인 방법으로 요청하는 경우 '$ne'연산자로 인해 틀린 password 값이 참으로 받아들여진다.

뭐.. 하지만 필터링을 통하여 가볍게 막을 수 있을 것 같다.