ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Dreamhack - Mango
    wargame/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
Designed by Tistory.