보안/드림핵 강의

[Web Hacking]Cross-site Request Forgery (CSRF) 정리

haerim9.9 2025. 2. 4. 18:12

ClientSide: CSRF

 

Cross Site Request Forgery (CSRF)

웹 서비스는 쿠키 또는 세션을 사용해 이용자를 식별한다. 임의 이용자의 쿠키를 사용할 수 있다면, 임의 이용자의 권한으로 웹 서비스의 기능을 사용할 수 있는 것이다.

 

CSRF : 임의 이용자의 권한으로, 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다. 공격자는 임의 이용자의 권한으로 서비스 기능을 사용해 이득을 취할 수 있다.

*예시 : 이용자의 계정으로 임의 금액을 송금해 금전적인 이득을 취하거나 비밀번호를 변경해 계정을 탈취, 관리자 계정을 공격해 공지사항 작성 등으로 혼란을 야기

 

 

Cross Site Request Forgery 동작

CSRF 공격에 성공하기 위해서, 공격자가 작성한 악성 스크립트를 이용자가 실행해야 한다. 공격자가 이용자에게 메일을 보내거나 게시판에 글을 작성해 이용자가 이를 조회하도록 유도하는 방법이 있다.

*악성 스크립트 : HTTP 요청을 보내는 코드

 

요청을 보내는 스크립트 작성 방법 : 이미지를 불러오는 img 태그를 사용, 웹 페이지에 입력된 양식을 전송하는 form 태그를 사용

<img src='http://bank.dreamhack.io/sendmoney?to=Dreamhack&amount=1337' width=0px height=0px>

img 태그를 사용한 스크립트의 예시

이미지의 크기를 줄일 수 있는 옵션을 활용하면, 이용자에게 들키지않고 임의 페이지에 요청을 보낼 수 있다.

 

/* 새 창 띄우기 */
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');

Javascript로 작성된 스크립트의 예시

새로운 창을 띄우고, 현재 창의 주소를 옮기는 등의 행위가 가능하다.

 

 

XSS와 CSRF 차이

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

 

요약

더보기

Cross Site Request Forgery(CSRF) : 사이트 간 요청 위조. 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격.


Exercise: CSRF, Exercise: CSRF-2

 

csrf-1 문제 풀이

csrf-2 문제 풀이