본문 바로가기
Web hacking/개념 정리 & 심화

[Dreamhack] W - STAGE 5 Cross Site Request Forgery(CSRF)

by m_.9m 2023. 5. 4.

1. Clint Side: CSRF


1-1 CSRF


CSRF는 서버에서 이용자를 식별하기 위해 쿠키를 사용하고 있어야 공격이 가능하다. 임의 이용자의 쿠키를 탈취해 해당 사용자의 권한으로 웹 서비스의 기능을 사용하는 공격을 클라이언트 측 위조 공격이라고 한다. 예를 들어 이용자의 계정으로 임의 금액을 송금해 금전적인 이득을 취득하거나 비밀번호를 변경해 계정을 탈취하고, 관리자 계정을 공격해 공지사항 작성 등으로 혼란을 야기할 수 있다.

1-2 동작


CSRF 공격에 성공하기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야합니다. 이를 위해 공격자는 이용자에게 메일을 보내거나 게시판의 글을 작성해 이용자가 이를 조회하도록 유도합니다. CSRF에서 실행되는 악성 스크립트는 HTML 또는 Javascript를 통해 작성할 수 있습니다.

Figure 3. HTML img 태그 공격 코드 예시.



<img src="/sendmoney?to=dreamhack&amount=1337">
<img src=1 onerror="fetch('/sendmoney?to=dreamhack&amount=1337');">
<link rel="stylesheet" href="/sendmoney?to=dreamhack&amount=1337">
...

Figure 4. Javascript 공격 코드 예시


/* 새 창 띄우기 */
window.open('<http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337>');
/* 현재 창 주소 옮기기 */
location.href = '<http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337>';
location.replace('<http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337>');

1-3 XSS와 CSRF의 차이


  • 공통점
  • 두 취약점은 모두 클라이언트를 대상으로 하는 공격이며 이용자가 악성 스크립트가 포함된 페이지에 접근하도록 유도해야한다.
  • 차이점
  • XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로 하는 공격이며 공격할 사이트의 오리진에서 스크립트를 실행시킨다. CSRF는 이용자가 임의 페이지에 HTTP 요청을 보내는 것을 목적으로 한다. 공격자는 이용자의 권한으로 웹 서비스의 임의 기능을 실행할 수 있다.

문제 페이로드:

<img src="change_password?pw=attacker_password" />