1. ๋ฌธ์
https://dreamhack.io/wargame/challenges/1401
2. ํด๊ฒฐ ๊ณผ์
(1) ์ฝ๋ ํ์ธ
app.js์ ag.js ๋๊ฐ์ง ํ์ผ์ ํ์ธํ ์ ์์๋ค.
๋จผ์ search() ํจ์์์๋ leg๊ฐ์ ๋ฐ์์ ๋๋ฌธ์๋ก ๋ณํํ ๋ค words ๋ฐฐ์ด์์ ๋ณํ๋ leg๊ฐ๊ณผ ์ผ์นํ๋ name์ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋ฆฌํดํด์ค๋ค.
/shop ๊ฒฝ๋ก์๋ post ์์ฒญ์ ๋ฐ์ body๊ฐ์์ leg ๊ฐ์ ๋ด์ฉ์ ๊ฐ์ ธ์ค๊ณ FLAG ๊ฐ๊ณผ ๋น๊ตํ๋ค.
- leg์ ๊ฐ์ด FLAG ์ธ ๊ฒฝ์ฐ, 403 + access denied
- FLAG๊ฐ ์๋๋ผ๋ฉด searchํจ์๋ฅผ ํตํด์ words ๋ฐฐ์ด์์ leg์ ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ฐพ์ ๋ฆฌํดํ๋ค.
- ์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ํด๋นํ์ง ์๋๋ค๋ฉด 404 ์๋ฌ๋ฅผ ๋ฐ์์ํจ๋ค.
const express = require("express")
const words = require("./ag")
const app = express()
const PORT = 3000
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
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}`)
})
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ใ
ํน๋ฐ๋ ๋จ์ด ๋ชฉ๋ก์ด ๋์จ๋ค.
์ฌ๊ธฐ์ name๊ฐ๋ค์ ๋ณด๋ฉด FLAG, DRAG ๋ฑ์ด ์กด์ฌํ๋ค.
module.exports = [
{
"id": 1,
"name": "FLAG",
"description": "DH{fake_flag}"
},
{
"id": 2,
"name": "DRAG",
"description": "To pull something along forcefully, often on the ground or another surface, causing friction or resistance. It also refers to the delay in performance or response time."
},
{
"id": 3,
"name": "SLAG",
"description": "The waste material produced by the smelting process, which involves separating metal from its ore. Slag is typically a mixture of metal oxides and silicon dioxide."
},
{
"id": 4,
"name": "SWAG",
"description": "Refers to stylish confidence in one's appearance or demeanor. It can also mean promotional goods or items given away for free as a form of advertising."
}
]
(2) ์ต์คํ๋ก์
postman์ ํตํด leg๊ฐ์ด flag์ธ post ์์ฒญ์ ๋ณด๋ด๋ณด์๋ค.
๋ด ์์๊ณผ ๋ฌ๋ฆฌ 403 forbidden์ด ๋จ๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
๊ทธ ์ด์ ๋ nginx.conf ํ์ผ์ ํ์ธํด๋ณด๋ฉด /shop, /shop/ ์ ๋ํ ๋ชจ๋ ์์ฒญ์ด deny๋๋๋ก ์ค์ ๋์ด์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์ ์ด๋ฅผ ์ฐํํด์ post ์์ฒญ์ ๋ณด๋ด์ผ ํ๋ค.
events {
worker_connections 1024;
}
http {
server {
listen 80;
listen [::]:80;
server_name _;
location = /shop {
deny all;
}
location = /shop/ {
deny all;
}
location / {
proxy_pass http://app:3000/;
}
}
}
403 forbidden ์ฐํ๋ฅผ ๊ตฌ๊ธ๋งํ์ฌ ๋์๋ฌธ์๋ฅผ ์ด์ฉํด์ ์ฐํํ๋ ๋ฐฉ๋ฒ์ ์๊ฒ ๋์๋ค.
๋์๋ฌธ์๋ฅผ ์ด์ฉํด ์ฐํํ ์๋ ์์ต๋๋ค. ๋ณดํต Application ์๋ฒ์ WAS ๊ฐ์ ์ฒ๋ฆฌ ๋ฐฉ์ ์ฐจ์ด๋ก ๋ฐ์ํ๋ฉฐ WAS์์ ์ ๊ท์ ๊ธฐ๋ฐ์ผ๋ก ์ฐจ๋จํ๋ ๊ฒฝ์ฐ ์ด ์ผ์ด์ค๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค.
[์ถ์ฒ] https://www.hahwul.com/2021/10/08/bypass-403/
๋ฐ๋ผ์ post ์์ฒญ์ /shop์ด ์๋ /SHOP์ผ๋ก ์์ฒญ์ ๋ณด๋ด๋ณด์๋๋ ํ๋๊ทธ๋ฅผ ํ์ธํ ์ ์์๋ค.