Web Hacking ๊ณผ์ œ_1(Dreamhack_CProxy: Inject)

2024. 9. 19. 20:35ใ†hacking : p_study/Dreamhack

๐Ÿ”ป๊ณผ์ œ 2

 

 

๋‘๋ฒˆ์งธ ๋ฌธ์ œ์˜ ์ฒซ ํ™”๋ฉด์ด๋‹ค.

 

์ผ๋‹จ admin์œผ๋กœ ์‹œ๋„ํ–ˆ๋Š”๋ฐ, ์–ด์ฉŒ๋‹ค ๋น„๋ฐ€๋ฒˆํ˜ธ 8๊ธ€์ž์ด์ƒ ์ด๊ตฌ๋‚˜.. ๋ผ๋Š” ๊ฒƒ์„ ์•Œ์•˜๋‹ค. 

 

 

 

๊ทผ๋ฐ ์ด ์ดํ›„์—๋ถ€ํ„ฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๊ฐˆํ”ผ๋ฅผ ์žก์ง€ ๋ชปํ•˜์˜€๋‹ค..

๊ฐœ๋ฐœ์ž๋„๊ตฌ๋ฅผ ํ†ตํ•ด์„œ ์ฝ”๋“œ๋„ ๋ดค๋Š”๋ฐ ๋”ฑํžˆ ์–ด๋–ค ์ •๋ณด๋ฅผ ์–ป์–ด์•ผํ•  ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹ค.

 

์ผ๋‹จ ๋ฌธ์ œ ํ‘ธ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ดค๋‹ค.

๋ฌธ์ œ๋ฅผ ํ’€๊ธฐ์œ„ํ•ด์„œ ํ•ต์‹ฌ์ ์œผ๋กœ ๋ด์•ผํ•˜๋Š” ํŒŒ์ผ์ด ๋‘๊ฐ€์ง€ ์ •๋„์žˆ๋‹ค.

 

1. index.js ํŒŒ์ผ

โ€‹

ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ง‘์ค‘์ ์œผ๋กœ ๋ณด์•„์•ผํ•  ๋ถ€๋ถ„์€ ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ์— ๋Œ€ํ•ด ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.

์ด ์›นํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์ „์ฒด์ ์ธ ๊ตฌ์„ฑ์„ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๊ธฐ์— ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์กด์žฌํ•˜๊ณ , ๊ทธ ๋ถ€๋ถ„์— ์ธ์ฆ์ด ํ•„์š”ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ€‹์ง€๊ธˆ ๋‹น์žฅ์€ ์ง„์งœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐพ๋Š” ๊ณณ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋‹ˆ ์ฝ”๋“œ ํŒŒ์•…๋งŒ ํ•˜๊ณ  ๋„˜๊ธฐ์ž.


/auth ์—”๋“œํฌ์ธํŠธ : db.doLogin ํ•จ์ˆ˜๋กœ ๋กœ๊ทธ์ธ์„ ์ง„ํ–‰ํ•œ๋‹ค.
๊ด€๋ จ ํ•จ์ˆ˜๋Š” db.js ํŒŒ์ผ์— ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.
โ€‹
/ ์—”๋“œํฌ์ธํŠธ : ๊ธฐ๋ณธ์ ์ธ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ณณ์œผ๋กœ  port, host ๋“ฑ์„ ์ž…๋ ฅํ•ด ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ณณ์ด๋‹ค.
/proxy ์—”๋“œํฌ์ธํŠธ : ์ฝ”๋“œ๋ก  ๋ณด์ด์ง€๋งŒ ์‹ค์ œ๋ก  ์ˆจ๊ฒจ์ ธ์žˆ๋‹ค.
/ ์—”๋“œํฌ์ธํŠธ์—์„œ ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด proxy ์—”๋“œํฌ์ธํŠธ๋กœ ์ด๋™, ์ฟผ๋ฆฌ์— ์ž…๋ ฅ์ด ๋‹ด๊ฒจ ์š”์ฒญ์ด ์ง„ํ–‰๋œ๋‹ค.
โ€‹
/api/history : ์‹ค์ œ๋กœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์ฐพ๋Š” ์—”๋“œํฌ์ธํŠธ์ด๋‹ค.
โ€‹
/api/local/flag ์—”๋“œํฌ์ธํŠธ : ํ”Œ๋ž˜๊ทธ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—”๋“œํฌ์ธํŠธ์ด๋‹ค.
์‹ค์ œ๋ก  ์šฐ๋ฆฌ๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์—†๋Š” ์—”๋“œํฌ์ธํŠธ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์‹ฌ์„ ๋‘์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

 

 

 

2. db.js ํŒŒ์ผ

โ€‹

์—ฌ๊ธฐ์„œ ๋ด์•ผํ•  ๊ฒƒ์€ sql ๋ฌธ ๋ฟ์ด๋‹ค.

const result = await query("SELECT * FROM users WHERE id = ? AND pw = ?", [id, pw]);

 

โ€‹

๋ฌธ์ œ ํ’€์ด ๋ฐฉ๋ฒ•์„ ๋งํ•ด๋ณด์ž๋ฉด,

 

์šฐ์„  sql ๊ด€๋ จ ํŒŒ์ผ์ธ flag_inject ํŒŒ์ผ์„ ์—ด์–ด๋ณด๋ฉด url์ด๋ผ๋Š” key์™€ admin_inject value๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” response๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  response์˜ data ๊ฐ’์œผ๋กœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ €์˜ id์— ํ•ด๋‹นํ•˜๋Š” url ๊ฐ’์„ ๊ฐ€์ง„ response๋ฅผ ์ฐพ์•„์˜ค๋Š”โ€‹

/api/history ์—”๋“œํฌ์ธํŠธ์—์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

โ€‹

๋”ฐ๋ผ์„œ sql ์ธ์ ์…˜์œผ๋กœ admin_inject ๊ณ„์ •์„ ํƒˆ์ทจํ•œ ๋‹ค์Œ, ๊ทธ ๊ณ„์ •์„ ๊ฐ€์ง„ ์ƒํƒœ์—์„œ /api/history ๋กœ ๋“ค์–ด๊ฐ€ reg๋ฅผ ํ™•์ธ,

๊ทธ ๋‹ค์Œ์— /api/history/{reg๊ฐ’}๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

 

[ํ•™์Šต ์ฐธ๊ณ  ์ž๋ฃŒ]

โ€‹

โ€‹ Node.js SQL Injection: Examples & Prevention (stackhawk.com)

 

โ€‹

 

Node.js SQL Injection: Examples & Prevention

Learn about what Node.js SQL injection is, what a SQL injection attack looks like, and measures to prevent them.

www.stackhawk.com

 

ํ•ด๋‹น ๋‚ด์šฉ์„ํ†ตํ•ด sql ์ฟผ๋ฆฌ๋ฌธ์„ ์•Œ์•„๋ƒˆ๊ณ  ์ด๋Š” ์ฟผ๋ฆฌ ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•œ  sql injection ๋ฐฉ์ง€ ๋Œ€์ฑ… ์ฝ”๋“œ์ด๋‹ค.

 

await query("SELECT * FROM users WHERE id = ? AND pw = ?", [id, pw]);

 

์ด ์ฝ”๋“œ๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ ๋งŒ๋“ค๋ฉด ๋ฌผ์Œํ‘œ๊ฐ€ ์žˆ๋Š” ๊ณณ์— id์™€ pw๊ฐ€ ์ž๋™์œผ๋กœ ์ด์Šค์ผ€์ดํ•‘๋˜์–ด ๋“ค์–ด๊ฐ€๋Š”๋ฐ,

๋”ฐ๋ผ์„œ sql injection ๊ณต๊ฒฉ์„ ์–ด๋Š์ •๋„ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

์š”์ฒญ์˜ body๊ฐ€ id=noid&pw=nopw ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค๋ฉด id=admin&pw[pw]=1๋กœ ์ธ์ ์…˜์ด ๊ฐ€๋Šฅํ•˜๋‹ค.โ€‹

pw[pw]๋กœ ๊ฐ’์„ ์ „๋‹ฌํ•  ๊ฒฝ์šฐ ๊ฐ’์ด ์•„๋‹Œ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์œผ๋กœ sql์—์„œ ํŒ๋‹จ๋˜๊ธฐ ๋•Œ๋ฌธ์— sql ๋ฌธ์€ ์•„๋ž˜์™€ ๊ฐ™์ด ๋œ๋‹ค.

 

SELECT * FROM users WHERE id = 'admin_inject' AND pw = `pw` = 1

 

 

๋กœ๊ทธ์ธ ์ƒํƒœ์—์„œ /api/history/1๋กœ ์ ‘์†ํ•˜๋ฉด ๋๋‚œ๋‹ค.

 

ํ•˜๋‚˜๋” ๊ธฐ์–ตํ•  ๊ฒƒ์€ ์•„๋ž˜์ธ๋ฐ, ์ด ์—”๋“œํฌ์ธํŠธ๋กœ์˜ ์ ‘๊ทผ์ด ํ•„์š”ํ•˜๋Š” ์ ์ด๋‹ค.

 

/api/history/:rid(\\d+)

 

์—ฌ๊ธฐ์„œ :rid(\\d+) ๋Š” ์ •๊ทœ์‹์œผ๋กœ ์ด ๊ณณ์— ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด rid ์˜ ๊ฐ’์œผ๋กœ ์ •ํ•ด์ง„๋‹ค๋Š” ๋œป์œผ๋กœ,โ€‹

api/history/1์„ ํ•˜๋ฉด rid = 1์ธ response๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

์ด๋Ÿฌ๋ฉด, ์ฝ”๋“œ์— ์˜ํ•ด ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์€ RESPONSE๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค๊ณ ํ•œ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ,, ๋‚œ ์‚ฌ์‹ค ํ•ด๋‹น ๋‚ด์šฉ์—  ๋Œ€ํ•ด ์—ด์‹ฌํžˆ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ์„ ์ฐพ์•„๋ณด๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ, ์•„์ง ์™„๋ฒฝํžˆ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ด์„œ ํ”Œ๋ž˜๊ทธ๋ฅผ ๊ตฌํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

๊ณต๋ถ€๋ฅผ ์ข€๋” ํ•ด๋ณด๋ฉด์„œ ๋‹ค์‹œ ๊ณผ์ œ๋ฅผ ํ’€์–ด๋‚ด์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

 

์ถ”๊ฐ€ ๊ณต๋ถ€๋ฅผ ์ง„ํ–‰ ํ›„ ๊ผญ ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์–ด๋‚ด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

+ ์ถ”๊ฐ€ ๊ณผ์ œ ์ง„ํ–‰ (2์ฐจ ์‹œ๋„ ์‹คํŒจ)

 

์ฝ”๋“œ์— ์˜ํ•ด ํ•„ํ„ฐ๋ง๋˜์ง€ ์•Š์€ response๊ฐ€ ๋‚˜ํƒ€๋‚œ๋‹ค.

๋กœ๊ทธ์ธ์„ ๋ˆŒ๋Ÿฌ์„œ /api/history/1์„ ์ž…๋ ฅํ•ด๋ณด์•˜๋‹ค. 

Cannot GET์ด๋ผ๊ณ  ๋œฌ๋‹ค.

 

 

Not Found๊ฐ€ ๋œฌ๋‹ค.

 

 3์ฐจ ์‹œ๋„๋„ ์ง„ํ–‰ํ•ด์•ผ์ง€..

 

 

 

์ด๋ฒˆ์ฃผ ๊ณผ์ œ ๋

 

[ ๊ณผ์ œ ์ฐธ๊ณ  ์ž๋ฃŒ ]

https://blog.naver.com/sun1497a/223205481650

 

CProxy:injection ๋ฌธ์ œ ํ•ด๊ฒฐ!!

#dreamhack ๊ฐ€๋” ๋ฌธ์ œ๋ฅผ ํ’€๋‹ค๋ณด๋ฉด ๊ณ ๋‡Œ์— ๋น ์งˆ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์”.. ํ’€์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์€๋ฐ ์ง„์งœ ๋ชจ๋ฅด๊ฒ ๋„ค.. ๋‹ต ๋ณผ...

blog.naver.com