Reborn XSpear 🔱


์ œ๊ฐ€ Dalfox ๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์ „์— Ruby๋กœ ์ž‘์„ฑํ–ˆ์—ˆ๋˜ XSpear๋ž€ ๋„๊ตฌ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋™์ผํ•˜๊ฒŒ XSS๋ฅผ ํ…Œ์ŠคํŒ…ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์˜€๊ณ , ํ˜„์žฌ ์„ฑ๋Šฅ์€ ๋‹น์—ฐํžˆ Dalfox์ชฝ์ด ์••๋„์ ์œผ๋กœ ์ข‹์€ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ž‘๋…„๋ถ€ํ„ฐ XSpear์— ๋Œ€ํ•œ Reborn ๊ณ„ํš์„ ์ƒ๊ฐํ•ด ๋‘์—ˆ์—ˆ๋Š”๋ฐ, ์ตœ๊ทผ ๋งŒ๋“ค๋˜ ๋„๊ตฌ๋„ ์–ด๋А ์ •๋„ ์œค๊ณฝ์ด ์žกํ˜€์„œ ์ด์ œ ๋ณธ๊ฒฉ์ ์œผ๋กœ XSpear์— ๋Œ€ํ•ด ๋Œ€๊ทœ๋ชจ ๊ฐœํŽธ์„ ์ง„ํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์–ด๋–ค ํ˜•ํƒœ๋กœ XSpear๊ฐ€ ๋ฐ”๋€Œ๊ฒŒ ๋ ์ง€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋กœ๋“œ๋งต์„ ๊ณต์œ ํ•ด ๋ณผ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.

Why

XSpear๋Š” ๋งˆ์ง€๋ง‰ ์ปค๋ฐ‹์ด ์ž‘๋…„ 9์›”์ด์ง€๋งŒ Github action ์ชฝ์˜ ๊ฐ„๋‹จํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์œ ์ง€ ๋ณด์ˆ˜์— ํ•„์š”ํ•œ ์ปค๋ฐ‹์„ ์ œ์™ธํ•˜๋ฉด ์•ฝ 3๋…„ ์ •๋„ ๋ฉˆ์ถฐ์žˆ๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์€ ์ถฉ์‹คํ•˜๊ณ  ์žˆ์–ด์„œ ์“ฐ๋Š”๋ฐ ๋ฌธ์ œ๋Š” ํฌ๊ฒŒ ์—†๊ฒ ์ง€๋งŒ ์œ ์ง€๋˜์ง€ ์•Š๋Š” ํ”„๋กœ์ ํŠธ๋Š” ์ ์ฐจ ํž˜์„ ์žƒ๊ธฐ ๋งˆ๋ จ์ž…๋‹ˆ๋‹ค.

Roadmap

Ruby to Crystal

๊ฐ€์žฅ ํฐ ๋ณ€ํ™”๋ฅผ ๊ณ ๋ คํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์–ธ์–ด์˜ ๋ณ€๊ฒฝ(Ruby -> Crystal)์ž…๋‹ˆ๋‹ค. Ruby๋Š” ๋ถ„๋ช…ํžˆ ์ข‹์€ ์–ธ์–ด์ง€๋งŒ ์†๋„ ๋“ฑ ํƒœ์ƒ์ ์ธ ํ•œ๊ณ„ ๋˜ํ•œ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฌธ๋ฒ•์ ์ธ ์œ ์‚ฌ์„ฑ์„ ๊ฐ•ํ•˜๊ฒŒ ๋ ๋ฉด์„œ ์ปดํŒŒ์ผ ์–ธ์–ด์ธ Crystal๋กœ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ์ธ์ ์œผ๋กœ๋„ ๊ด€์‹ฌ์ด ๋งŽ์€ ์–ธ์–ด์ด๊ณ  ์ตœ๊ทผ์— ์ง„ํ–‰ํ•œ CLI ๋„๊ตฌ ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋Š” Crystal๋กœ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Attack Surface ๋ถ„์„ ๋„๊ตฌ์ธ Noir๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ Crystal์„ ์‚ฌ์šฉํ–ˆ๊ณ  ์†์— ๊ต‰์žฅํžˆ ์ž˜ ๋งž์•„์„œ ์•ž์œผ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ๋„ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

Noir ๋Š” ์ดˆ๊ธฐ ๊ตฌ์„ฑ์„ Go๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค๊ฐ€ Crystal๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด์„œ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์ง„ํ–‰๋œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.

For Manual Testing

XSpear๋Š” ์ดˆ๊ธฐ์˜ ๋ฐฉํ–ฅ์„ฑ์„ ์œ ์ง€ํ•˜์—ฌ ๊ฐœํŽธ๋œ ๋ฒ„์ „ ๋˜ํ•œ Manual Testing์„ ์ค‘์ ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ํ˜•ํƒœ์˜ Input(URL, Form, JSON, DWR, ETC..)์„ ์ง€์›ํ•˜๊ณ  ๊ฐ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ Fuzzing ํฌ์ธํŠธ์— ๋Œ€ํ•œ ๋””ํ…Œ์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋ž˜๋„ Dalfox์™€ ๋น„๊ตํ•ด ๋ณผ ์ˆ˜ ์žˆ์„ํ…๋ฐ Dalfox๋Š” ๋Œ€๊ทœ๋ชจ URL์„ ๋Œ€์ƒ์œผ๋กœ ๋ณ‘๋ ฌ ์Šค์บ”์— ํŠนํ™”๋œ ๋„๊ตฌ๋ผ๋ฉด XSpear๋Š” ๋‹จ์ผ ๋Œ€์ƒ์„ ์‹ฌ์ธต ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•œ ๋„๊ตฌ๋กœ Reborn์ด ๋ชจ๋‘ ์ง„ํ–‰๋œ ์‹œ์ ์—์„  XSpear๊ฐ€ ๋” ๋””ํ…Œ์ผํ•œ ์ •๋ณด๋ฅผ ์ค„ ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋ฉ๋‹ˆ๋‹ค.

For Exploiting

Dalfox๋ฅผ ํฌํ•จํ•œ ๋Œ€๋ถ€๋ถ„์˜ XSS ๋„๊ตฌ๋Š” ํƒ์ง€์— ์ดˆ์ ์ด ๋งž์ถฐ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜‘๊ฐ™์€ XSS ์ง€๋งŒ ์–ด๋–ค ๋ณด์•ˆ ๋ฆฌ์Šคํฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์ฆ๋ช…ํ•˜๋ƒ์— ๋”ฐ๋ผ ์˜ํ–ฅ๋„๋Š” ํฌ๊ฒŒ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Reborn ๊ณผ์ •์— ํ•ต์‹ฌ ๋ชฉํ‘œ ์ค‘ ํ•˜๋‚˜๋Š” Exploit์— ๋Œ€ํ•œ ๋ถ€๋ถ„์„ ๋งŽ์ด ์ œ๊ณตํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ํƒ์ง€ํ•œ XSS๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ์•Œ๋ฆผ๊ณผ ๋™์‹œ์— ๊ฐ€๋Šฅํ•œ Exploiting ๋ฐฉ๋ฒ•๋“ค์„ ํ†ตํ•ด ๋ฆฌ์Šคํฌ๋ฅผ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ทธ๋Ÿฐ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

Input Format

์ž…๋ ฅ ํฌ๋งท์— ๋Œ€ํ•ด ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋ณ€๊ฒฝํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

xspear <METHOD> <URL> <OBJECT>

# OBJECT๋Š” Form, JSON ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์˜๋ฏธํ•˜๊ณ  ์ž๋™์œผ๋กœ ํŒŒ์‹ฑํ•ฉ๋‹ˆ๋‹ค.
# Example: xspear POST https://localhost/search "q=cat" "Cookie: sessions=1234454;"

๊ฐœ์ธ์ ์œผ๋กœ ๊ต‰์žฅํžˆ ์ข‹์•„ํ•˜๋Š” http client์ธ HTTPie์—์„œ ๋งŽ์€ ์˜๊ฐ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋น„์Šทํ•œ ํ˜•ํƒœ์˜ Input์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์žกํ•œ flag ์—†์ด ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”๊ฟ€ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

XSSMaze

์ด๋Ÿฌํ•œ Reborn์„ ์œ„ํ•ด ์ค€๋น„ํ•˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ด ํ•˜๋‚˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ XSSMaze์ธ๋ฐ์š”. ์—ฌ๋Ÿฌ ๋ ˆ๋ฒจ๋ณ„ XSS ์ทจ์•ฝ ํŽ˜์ด์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” ์›น ์„œ๋น„์Šค๋กœ ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ผ€์ด์Šค๋ฅผ ๋Š˜๋ฆฌ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” XSpear ๊ฐœํŽธ๊ณผ ๋ณ„๊ฐœ๋กœ Dalfox ๋˜ํ•œ ๋™์ผํ•˜๊ฒŒ ์ ์šฉํ•˜์—ฌ ๋ถ„์„ ์ปค๋ฒ„๋ฆฌ์ง€๋ฅผ ๋Š˜๋ฆด ์ƒ๊ฐ์ด์—์š” ๐Ÿ˜€

Closing Thoughts

์ œ๊ฐ€ ๋งŒ๋“  2๊ฐœ์˜ ๋„๊ตฌ๋ฅผ ๊ฒฝ์Ÿ์‹œํ‚ค๋Š” ๊ฒƒ ๊ฐ™์•„ ํ•œํŽธ์œผ๋ก  ์‚ด์ง ๋„๊ตฌ์— ๋ฏธ์•ˆํ•˜๊ธฐ๋„ ํ•˜์ง€๋งŒ ์—ฌ๋Ÿฌ๋ชจ๋กœ ์žฌ๋ฏธ์žˆ๋Š” ์ž‘์—…์ด ๋  ๊ฑฐ๋ž€ ์ƒ๊ฐ์ด ๋“ค๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Reborn ๊ณผ์ •์€ ๋Šฆ์–ด๋„ ์˜ฌํ•ด ์•ˆ์— ๋งˆ๋ฌด๋ฆฌํ•ด์„œ ๋งŒ๋‚˜๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜€



Source link