이번 '화이트 햇 해킹방어 대회 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 값이 참으로 받아들여진다.
뭐.. 하지만 필터링을 통하여 가볍게 막을 수 있을 것 같다.