(CTF 출제)DreamHack - Mango

2024. 4. 30. 11:39·CTF

 

 

문제화면이다.

 

 

 

 

 

 

 

 

login에 대한 파라미터가 보인다.

URL에 대입해서 확인해 보자.

 

 

 

 

 

음... admin으로 날먹을 시도해 보자.

 

 

 

 

 

 

 

그럼 그렇지 소스코드를 보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

const express = require('express');
const app = express();

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/main', { useNewUrlParser: true, useUnifiedTopology: true });
const db = mongoose.connection;

// flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'}
const BAN = ['admin', 'dh', 'admi'];

filter = function(data){
    const dump = JSON.stringify(data).toLowerCase();
    var flag = false;
    BAN.forEach(function(word){
        if(dump.indexOf(word)!=-1) flag = true;
    });
    return flag;
}

app.get('/login', function(req, res) {
    if(filter(req.query)){
        res.send('filter');
        return;
    }
    const {uid, upw} = req.query;

    db.collection('user').findOne({
        'uid': uid,
        'upw': upw,
    }, function(err, result){
        if (err){
            res.send('err');
        }else if(result){
            res.send(result['uid']);
        }else{
            res.send('undefined');
        }
    })
});

app.get('/', function(req, res) {
    res.send('/login?uid=guest&upw=guest');
});

app.listen(8000, '0.0.0.0');

 

 

일단 Nosql mongo db 인건 알고 있으니 js로 들여다보자.

 

필터링이 존재한다.

 

 

 

 

// flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'}
const BAN = ['admin', 'dh', 'admi'];

filter = function(data){
    const dump = JSON.stringify(data).toLowerCase();
    var flag = false;
    BAN.forEach(function(word){
        if(dump.indexOf(word)!=-1) flag = true;
    });
    return flag;
}

 

 

문자열 'admin', 'dh', 'admi'에 대한 필터링이다.

 

MongoDB 에서는 정규표현식을 사용할 수 있는 특징이 존재한다.

 

홈페이지에서는 정규표현식을 사용해서 admin이라는 페이지를 띄울 수 있지만 DH 플래그값을 얻을 수가 없음.

일일이 하려면 오래 걸린다.

 

정규표현식을 이용 파이썬에서  패스워드를 맞춰보자.

 

admin 계정의 패스워드 길이는 힌트로 36글자임을 알 수 있다. (DH포함)

 

실행시간을 줄이긴 위해서는 32글자라고 정하여 패스워드를 찾아보도록 하자.

 

먼저 영어, 숫자로 구성되어 있기에 string을 이용해서 둘 다 삽입이 가능한 문자열을 만들도록 하자

 

그다음에는 32글자에 대한 request를 시도하는 것이다.

 

전부 코딩을 해서 요청을 보내면 플래그 값을 출력해 준다.

 

 

 

'CTF' 카테고리의 다른 글

(CTF 출제)DreamHack - Flying Chars  (0) 2024.05.02
(CTF 출제)DreamHack - Easy Login  (1) 2024.05.01
(CTF 출제)DreamHack - Carve Party (수정)  (0) 2024.04.05
(CTF 출제)DreamHack - PHPreg (수정)  (0) 2024.04.05
(CTF 출제)DreamHack - ex-reg-ex (수정)  (0) 2024.04.05
'CTF' 카테고리의 다른 글
  • (CTF 출제)DreamHack - Flying Chars
  • (CTF 출제)DreamHack - Easy Login
  • (CTF 출제)DreamHack - Carve Party (수정)
  • (CTF 출제)DreamHack - PHPreg (수정)
G_OM
G_OM
최대한 설명 열심히 하려고 합니다. 궁금한 거 있으면 언제든지 물어보셔도 좋습니다.
  • G_OM
    끄적끄적
    G_OM
  • 전체
    오늘
    어제
    • 분류 전체보기 (157)
      • 모의해킹 (18)
      • CTF (22)
      • Wargame (69)
        • Linux_bandit (33)
        • Webhacking.kr (36)
      • DreamHack (52)
        • WEB (14)
        • Reverising (9)
        • System (0)
      • Mobile_security (13)
        • Drozer_Android (4)
        • Frida_Android (1)
        • IOS (1)
        • tool (1)
      • 정보보안기사 (2)
      • IT? (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

    • DreamHack 에 대한 문제들...
  • 인기 글

  • 태그

    Linux
    url encode
    overthewire
    webhacking.kr
    CTF
    bandit
    bandit17
    wargame
    리눅스
    Frida
    cookies
    Linux wargame
    webhacking
    정보보안기사
    워게임
    lfi
    bandit30
    OSINT
    insecurebankv2
    bandit18
    drozer
    sql injection
    Android
    모의해킹
    bandit20
    리눅스 워게임
    php
    Dreamhack
    난독화
    php wrapper
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
G_OM
(CTF 출제)DreamHack - Mango
상단으로

티스토리툴바