-
Dreamhack - Mangowargame/Dreamhack 2024. 2. 27. 14:28
[LEVEL 2 - Mango - web]
일단 문제 파일을 다운로드 받고
문제 환경에 접속하면 위와 같다.
Query&Type을 보면 이용자가 전달한 쿼리의 값과 타입을 반환하는 코드에서 요청 결과를 보면 string 외에 다양한 형태의 object도 쿼리로 전달될 수 있다.
로그인 페이지를 구성하는 코드에서는 MongoDB에 쿼리를 전달하는 부분을 살펴보면, 쿼리 변수의 타입을 검사하지 않는다. 따라서 이로 인해 NoSQL Injection 공격이 발생할 수 있다.
/login 에서는 로그인에 성공했을 때의 이용자의 uid만 출력한다.
Blind NoSQL Injection을 통해 admin의 upw를 획득해야 한다.
우선 MongoDB의 $regex 연산으로 정규표현식을 이용해 데이터를 검색할 수 있다는 점과 main.js에 filter 함수가 admin, dh, admi 문자열들을 필터링하고 있다는 점을 고려하여 우회해야 한다.
그리고 정규표현식을 통해 한 글자씩 알아내야 하므로, 여러 번 쿼리를 전달해야 한다.
이러한 사항을 만족시키는 익스플로잇 스크립트를 아래와 같이 작성할 수 있다.
위 익스플로잇 코드를 실행시키면
아래와 같이 최종 flag값을 알아낼 수 있다.
플래그를 획득했다!
'wargame > Dreamhack' 카테고리의 다른 글
Dreamhack - image-storage (0) 2024.03.18 Dreamhack - broken-png (0) 2024.03.18 Dreamhack - simple_sqli (0) 2024.02.21 Dreamhack - csrf-2 (0) 2024.02.20 Dreamhack - csrf-1 (0) 2024.02.20