Archive for Dev. (junyup2)

์ง€์‹์„ ์ฑ„์›Œ๊ฐ€๋Š” ใ€Ž๊ฐœ๋ฐœ์ž/ํ™”์ดํŠธํ•ด์ปคใ€๋ฅผ ๋ชฉํ‘œ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ธ”๋กœ๊ทธ

Wargame & CTF/SegFault

[SegFault] (CSRF) - GET Admin 3

Gearvirus(junyup2) 2024. 1. 17. 23:08

[SegFault] (CSRF)

GET Admin 3

admin ๊ณ„์ •์„ ํƒˆ์ทจํ•ด ๋กœ๊ทธ์ธํ•˜๋ฉด, flag๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ ํŒŒ์•…

๋ณธ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ CSRF ์ทจ์•ฝ์ ์„ ์ด์šฉํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์›ํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , ๊ด€๋ฆฌ์ž visit Bot์— ํ•ด๋‹น ๋งํฌ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ admin ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๋‹น ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋ฉด flag๊ฐ€ ๋‚˜์˜ค๋„๋ก ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

์šฐ์„  ์œ„์˜ ๊ด€๋ฆฌ์ž visit Bot ๋งํฌ์— ์ ‘์†ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์˜จ๋‹ค.

 

ํšŒ์›๊ฐ€์ž…ํ•œ id์˜ ๋’ค์— _amdin์„ ๋ถ™์—ฌ๋„ฃ์€ id๊ฐ€ ๊ณต๊ฒฉํ•  id ์ด๋‹ค.

ex) gear -> gear_admin

๊ณต๊ฒฉํ•  ์•„์ด๋””์™€ CSRF ๊ณต๊ฒฉ ์ •๋ณด๊ฐ€ ๋‹ด๊ฒจ์žˆ๋Š” URL์„ ์ž…๋ ฅํ•˜๋ฉด ํ•ด๋‹น ์•„์ด๋””์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ฒŒ ๋œ๋‹ค.

๋ฌธ์ œ ๋งํฌ์— ์ ‘์†์„ ํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ฐฝ์ด ๋‚˜์˜จ๋‹ค.

์šฐ์„  ํšŒ์›๊ฐ€์ž… ํ›„ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•ด๋ณธ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” CSRF ๊ณต๊ฒฉ์„ ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์šฐ์„  ๋งˆ์ดํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐ€์„œ ๋น„๋ฐ€๋ณ€๊ฒฝ์„ ์‹ค์ œ๋กœ ์‹œ๋„ํ•ด๋ณด๊ณ  ๊ทธ ๊ณผ์ •์„ ํ™•์ธํ•ด๋ณธ๋‹ค.

๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ณผ์ •์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ณด๊ณ  ์ด๋ฅผ Burp๋ฅผ ํ†ตํ•ด ํ™•์ธํ•œ๋‹ค.

์œ„์˜ ์š”์ฒญ์„ ๋ณด๋ฉด pwํŒŒ๋ผ๋ฏธํ„ฐ์™€ ํ•จ๊ป˜ csrf_token์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ดํ›„์˜ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๋งˆ์ดํŽ˜์ด์ง€์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜๋ฉด, CSRF Token์ด ๋ฐœํ–‰๋˜๊ณ  ์ด์— ๋Œ€ํ•œ ์ผ์น˜ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜์—ฌ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋ณ€๊ฒฝ๋˜๊ณ , ๋ฉ”์ธํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ„๋‹ค.

 

CSRF_Token

CSRF Token์€ CSRF ๊ณต๊ฒฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋Œ€์‘์ฑ…์˜ ํ•œ๊ฐ€์ง€๋กœ์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ํŽ˜์ด์ง€์— ์ ‘์†ํ• ๋•Œ ๋งˆ๋‹ค ์ƒˆ๋กœ์ด ๋ฐœ๊ธ‰๋˜๋Š” ๋žœ๋คํ•œ ๊ฐ’์ด๋‹ค.

 

CSRF Point (์ธ์ฆ ์ •๋ณด)

์œ„์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋ณด๋ฉด, CSRF ํ† ํฐ์„ ์ด์šฉํ•˜์—ฌ ์ธ์ฆ์„ ์ง„ํ–‰ํ•˜์ง€๋งŒ, ์ด๊ฒƒ์€ ์ด์šฉ์ž๊ฐ€ ์ถ”๊ฐ€์ ์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ์ธ์ฆ์ •๋ณด๊ฐ€ ์•„๋‹Œ, ํ•ด๋‹น ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์˜ฌ๋ฐ”๋ฅธ ์ ‘๊ทผ ๊ณผ์ •์—์„œ ๋ฐœ๊ธ‰๋˜๋Š” ๋žœ๋คํ•œ ํ† ํฐ์— ๋ถˆ๊ณผํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ด๋Š” ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

XSS Point

XSS๋ฅผ ํ™œ์šฉํ•˜์ง€ ์•Š๋Š” CSRF ์ทจ์•ฝ์ ์€ URL์„ ํด๋ฆญํ•˜๋„๋ก ์œ ๋„ํ•ด์•ผํ•œ๋‹ค. ํ•˜์ง€๋งŒ XSS ์ทจ์•ฝ์ ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ์ œ๋กœํด๋ฆญ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ณต์ง€์‚ฌํ•ญ์˜ ๊ธ€์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ XSS๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ํ™•์ธํ•ด๋ณด๊ธฐ ์œ„ํ•ด ์Šคํฌ๋ฆฝํŠธ์— ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋Š” ํŠน์ˆ˜ ๋ฌธ์ž< ' " >๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ํ™•์ธํ•ด๋ณธ๋‹ค.

์‘๋‹ต(Response)์„ ํ™•์ธํ•ด๋ณธ ๊ฒฐ๊ณผ ๊ธ€์˜ ๋‚ด์šฉ ๋ถ€๋ถ„์— ์ž…๋ ฅ ๊ฐ’์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜์˜€๋‹ค.


ํ’€์ด ๊ณผ์ • (ํ•ด๊ฒฐ ๋ฐฉ์•ˆ)

CSRF ํ† ํฐ์„ ์šฐํšŒํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์„ ์œ„ํ•œ ํŽ˜์ด๋กœ๋“œ(Payload)๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.

ํŽ˜์ด๋กœ๋“œ(Payload)

<iframe src="http://ctf.segfaulthub.com:7575/csrf_3/mypage.php" id="targetPage" style="display:none"></iframe>
<script>
var targetFrame=document.getElementById('targetPage');
targetFrame.onload=function(){
var domPage=targetFrame.contentDocument;
var csrfToken=domPage.getElementsByName("csrf_token")[0].value;
document.write('<iframe name="stealthFrame" sandbox="allow-scripts" style="display:none"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_3/mypage_update.php" id="tempForm" target="stealthFrame"><input type="hidden" name="pw" value="1234"><input type="hidden" name="csrf_token" value="',csrfToken,'"></form>');
document.getElementById("tempForm").submit();
}
</script>

iframe์—์„œ ๋งˆ์ดํŽ˜์ด์ง€์— ์ ‘์†ํ•˜์—ฌ ํ•ด๋‹น ํŽ˜์ด์ง€์—์„œ ๋‹ค์‹œ iframe์„ ์ด์šฉํ•˜์—ฌ ์ ‘๊ทผํ•˜๋„๋ก ํ•˜์—ฌ CSRF ํ† ํฐ์„ ๋ฐœํ–‰๋ฐ›๊ณ  ํ•ด๋‹น ๊ฐ’์„ ์ž…๋ ฅ์œผ๋กœ ๋„ฃ์–ด์ฃผ๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜์—ฌ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋ณ€๊ฒฝํ•œ๋‹ค.

 

์Šคํฌ๋ฆฝํŠธ ์‚ฝ์ž…

XSS ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋Š” ๊ธ€์“ฐ๊ธฐ ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜์—ฌ ํ•ด๋‹น ํŽ˜์ด๋กœ๋“œ๋ฅผ ๊ธ€์˜ ๋‚ด์šฉ์— ์‚ฝ์ž…ํ•œ๋‹ค.

ํ•ด๋‹น ๊ธ€์— ์ ‘๊ทผํ•ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์ดํ›„์˜ ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉด ๋งˆ์ดํŽ˜์ด์ง€์— ์ ‘๊ทผํ•˜์—ฌ, ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์„ ์ง„ํ–‰ํ•œ๋‹ค.

์ด์ œ ํ•ด๋‹น ๊ธ€์— ์ ‘๊ทผํ•˜๋Š” URL์„ ๊ด€๋ฆฌ์ž visit Bot์— ๋„ฃ์–ด์ค€๋‹ค.

์ดํ›„ ๋กœ๊ทธ์•„์›ƒ์„ ํ•˜๊ณ  ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ์˜ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•œ๋‹ค.

๊ด€๋ฆฌ์ž ๊ณ„์ •์„ ๋ณ€๊ฒฝ์‹œํ‚จ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๊ทธ์ธ๋˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์•Œ๋ฆผ์ฐฝ์— Flag๊ฐ’์ด ์ถœ๋ ฅ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ• ์ˆ˜ ์žˆ๋‹ค.

์œ„์™€ ๊ฐ™์ด ๊ด€๋ฆฌ์ž ๊ณ„์ •์œผ๋กœ์˜ ๋กœ๊ทธ์ธ์„ ํ†ตํ•ด flag ๊ฐ’์ด ํš๋“๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.


์ทจ์•ฝ์ ์— ๊ด€ํ•œ ๊ณ ์ฐฐ

๋ณธ ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์— ์žˆ์–ด CSRF ํ† ํฐ์ด ์กด์žฌํ•˜์ง€๋งŒ, ์ด์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•˜๋Š” ์ถ”๊ฐ€์ ์ธ ์ธ์ฆ์ •๋ณด ์—†์ด ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋ฐœ์ƒํ•œ CSRF ์ทจ์•ฝ์ ์ด๋‹ค.
CSRF Token์˜ ๊ฒฝ์šฐ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ํŽ˜์ด์ง€๋กœ ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•œ ์ด์ „ํŽ˜์ด์ง€, ์ฆ‰ ์ด ๋ฌธ์ œ์˜ ๊ฒฝ์šฐ ๋งˆ์ดํŽ˜์ด์ง€์— ํ•ด๋‹นํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ๊ฒฝ์šฐ, ๋ฐœ๊ธ‰๋˜๋Š” ๋žœ๋คํ•œ ํ† ํฐ์œผ๋กœ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ๊ณผ์ •์—์„œ ์ด๋ฅผ ํ™•์ธํ•˜๊ฒŒ ๋œ๋‹ค.
ํ•˜์ง€๋งŒ ๋ณธ ๋ฌธ์ œ ์ฒ˜๋Ÿผ ํ† ํฐ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ iframe์„ 2๋ฒˆ ์ด์šฉํ•˜์—ฌ ์šฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์— ์žˆ์–ด์„œ๋Š” ์ถ”๊ฐ€์ ์ธ ์ธ์ฆ ์ ˆ์ฐจ๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•œ๋‹ค.

์งˆ๋ฌธ ํ™˜์˜, ์ˆ˜์ • ๋ฐ ๋ณด์™„์— ๋Œ€ํ•œ ์ง€์  ํ™˜์˜