ROOTME] NoSQL Injection - Authentication

노션으로 옮김·2020년 3월 18일
0

wargame

목록 보기
19/59
post-thumbnail

문제

로그인 페이지가 존재한다.
아이디와 패스워드는 GET 파라미터로 전달된다.


풀이

NoSQL 인젝션으로는 몽고DB를 대상으로 한 인젝션 기법이 일반적이다.

시도해보자

login=admin$&pass[$ne]=test

하지만 단순히 admin으로 연결됬다는 문구만 출력된다.
다른 계정을 찾아야할 것 같다.

login[$ne]=admin$&pass[$ne]=test

마찬가지로 test 계정으로 로그인됬다고 표시가 된다.
다시 찾아보자.

$regex

mongoDB에서 정규표현식으로 검색할 때 사용하는 연산자이다.
이 연산자를 이용해 특정 문자열을 제외하여 검색할 수 있다.

https://stackoverflow.com/questions/406230/regular-expression-to-match-a-line-that-doesnt-contain-a-word

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

0개의 댓글