1. ๋ฌธ์
https://dreamhack.io/wargame/challenges/1402
2. ํด๊ฒฐ ๊ณผ์
(1) ์ฝ๋ ๋ถ์
์ ์ ํผ baby-case ๋ฌธ์ ์ ์ ๊ทธ๋ ์ด๋ ๋ฒ์ ์ด๋ค.
2024.08.19 - [CTF, War game] - [Dreamhack] Level 1: baby-Case
์ฝ๋๋ ์ ์ฒด์ ์ธ ๊ธฐ๋ฅ์ ๋์ผํ๊ณ , app.set('case sensitive routing', true) ์ค์ ์ ํตํด ๋์๋ฌธ์๋ฅผ ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ๊ฒ ๋๋ค. (๋์๋ฌธ์๋ฅผ ์ด์ฉํ ์ฐํ ๋ถ๊ฐ๋ฅ)
๋ํ ์์ฒญ์์ leg์ ๊ฐ์ ๋ฐ์์ฌ ๋ ์๋ฌธ์๋ก ๋ฐํํ์ฌ ๋ฐ์์ค๊ณ ์ด ๊ฐ์ด flag๋ผ๋ฉด access denied๋ฅผ ๋์ด๋ค.
words์์ ๋ฌธ์์ด์ ์ฐพ์ ๋ name์ ๊ฐ์ leg๋ฅผ ๋ชจ๋ ๋๋ฌธ์๋ก ๋ฐ๊พผ ๊ฒ๊ณผ ๋น๊ตํ๋ค.
์ฆ, ์ด์ baby-case ๋ฌธ์ ์์๋ ๋์๋ฌธ์๋ฅผ ํตํ ์ฐํ(SHOP / flag)๊ฐ ๊ฐ๋ฅํ์ง๋ง ์ด ๋ฌธ์ ์์๋ ์ด ๋ฐฉ๋ฒ์ด ๋จนํ์ง ์๋๋ค.
const words = require("./ag")
const express = require("express")
const PORT = 3000
const app = express()
app.set('case sensitive routing', true)
app.use(express.urlencoded({ extended: true }))
function search(words, leg) {
return words.find(word => word.name === leg.toUpperCase())
}
app.get("/",(req, res)=>{
return res.send("hi guest")
})
app.post("/shop",(req, res)=>{
const leg = req.body.leg.toLowerCase()
if (leg == 'flag'){
return res.status(403).send("Access Denied")
}
const obj = search(words,leg)
if (obj){
return res.send(JSON.stringify(obj))
}
return res.status(404).send("Nothing")
})
app.listen(PORT,()=>{
console.log(`[+] Started on ${PORT}`)
})
ํ์ง๋ง POST ์์ฒญ ์์ฒด๋ ๋ค๋ฅธ ์ฐํ ๋ฐฉ๋ฒ์ด ๋ง๋ค.
์ค๋ฅ๋ฉ์์ง์ ๋์ปค ํ์ผ์์ NGINX ๋ฒ์ ์ด 1.22.0์ด๋ผ๋ ๊ฒ์ ์ ์ ์์ผ๋ฏ๋ก ์ ์ ํ ์ฐํ๋ฒ์ ์ฐพ์ ์์ฒญ์ ๋ณด๋ด์ค ๊ฒ์ด๋ค.
์ฐํ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด Nginx๋ ๊ฒฝ๋ก๋ฅผ ํ์ธํ๊ธฐ ์ ์ ๊ฒฝ๋ก ์ ๊ทํ๋ฅผ ์ํํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ฐฑ์๋ ์๋ฒ๊ฐ ๋ค๋ฅธ ์ ๊ทํ(nginx๊ฐ ์ ๊ฑฐํ์ง ์๋ ๋ฌธ์ ์ ๊ฑฐ)๋ฅผ ์ํํ๋ ๊ฒฝ์ฐ ์ด ๋ฐฉ์ด๋ฅผ ์ฐํํ ์ ์์ต๋๋ค.
\xA0๋ postman์ ํตํด์ ์์ฒญ์ ๋ณด๋ด๋ฉด ์ญ์ ๋์ง ์๊ณ ๊ทธ๋๋ก ์์ฒญ์ด ๊ฐ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ์๋ณด์๋ค. (์์ผ๊น์์๋ ๋ถ์ด ์๋ค๋ฉด ์ ๋ฐ ์ ์๊ฒ ์ด์ ๋ฅผ ์๋ ค์ฃผ์ธ์..)
๋ฐ๋ผ์ burp suite๋ฅผ ํตํด์ /shop\xa0์ผ๋ก post ์์ฒญ์ ๋ณด๋ผ ๊ฒ์ด๋ค.
flag์ ๋ํ ์ฐํ๋ toLowerCase()์ ๋ํ ๊ฒฐ๊ณผ์ flag๋ฅผ ๋น๊ตํ๊ณ toUpperCase()์ ๊ฒฐ๊ณผ์ FLAG๋ฅผ ๋น๊ตํ๋ค.
์ด๋, ํ๋ฅดํค์์ด๋ฅผ ์ด์ฉํ๋ฉด ๋์๋ฌธ์์ ๋ํ ๋น๊ต ์ฐํ๋ฅผ ์งํํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค.
[์ฐธ๊ณ ] https://lovflag.tistory.com/58
i์ ๋ํ ๋ด์ฉ๋ง ์๊ณ ์์๋๋ฐ, flag์ ๋ํ ์ฐํ ๋ํ ๏ฌ์ ํตํด์ ๊ฐ๋ฅํ๋ค.
https://dev.to/jagracey/hacking-github-s-auth-with-unicode-s-turkish-dotless-i-460n
(2) ์ต์คํ๋ก์
๋ฐ๋ผ์ ์๋์ ๊ฐ์ด ์์ฒญ์ ๋ณด๋ด์ฃผ๋ฉด ํ๋๊ทธ๊ฐ ์ถ๋ ฅ๋๋ค.