W4 CSRF(Cross Site Request Forgery)

hyuun01·2022년 10월 5일
0

WebHacking

목록 보기
7/12

CSRF(Cross Site Request Forgery; 교차 사이트 요청 위조)

1. 정의

  • 이용자를 속여서, 의도치 않은 요청에 동의하게 하는 공격
  • 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점
  • 사이트 간 요청 위조
  • 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 만드는 공격
  • 공격자는 임의 이용자의 권한으로 서비스 기능을 사용해 이득을 취할 수 있음


2. 예시

  • ex) 그럴듯한 웹 페이지를 만들어서 이용자의 입력을 유도
    -> 이용자가 값을 입력
    -> 이를 은행이나 중요 포털 사이트 등으로 전송
    -> 이용자가 동의한 것 같은 요청을 발생시킴
    -> 만약, 이용자가 “자동 로그인”등의 기능을 사용하여 브라우저에 세션 쿠키를 저장하고 있었다면, 실제로 계좌 이체가 발생하거나 비밀번호 초기화가 이뤄질 수도

이용자의 송금 요청

GET /sendmoney?to=dreamhack&amount=1337 HTTP/1.1
Host: bank.dreamhack.io
Cookie: session=IeheighaiToo4eenahw3

송금 기능

# 이용자가 /sendmoney에 접속했을때 아래와 같은 송금 기능을 웹 서비스가 실행함.
@app.route('/sendmoney')
def sendmoney(name):
    # 송금을 받는 사람과 금액을 입력받음.
    to_user = request.args.get('to')
	amount = int(request.args.get('amount'))
	
	# 송금 기능 실행 후, 결과 반환	
	success_status = send_money(to_user, amount)
	
	# 송금이 성공했을 때,
	if success_status:
	    # 성공 메시지 출력
		return "Send success."
	# 송금이 실패했을 때,
	else:
	    # 실패 메시지 출력
		return "Send fail."

공격코드

<img src="/sendmoney?to=dreamhack&amount=1337">
<!-- onerror : 이미지 로드 에러 발생 시 -->
<img src=1 onerror="fetch('/sendmoney?to=dreamhack&amount=1337');">
<link rel="stylesheet" href="/sendmoney?to=dreamhack&amount=1337">


3. 공격

1) 공격 개요

  • 공격자가 작성한 악성 스크립트를 이용자가 실행해야
  • 이용자가 악성 스크립트 실행하게 유도하는 방법
    ex) 이용자에게 메일을 보내기
      게시판에 글을 작성해 이용자가 이를 조회하도록 유도

2) 공격 방법

  • 공격 스크립트는 Javascript OR Python 으로 작성 가능

  • <img> 태그나 <form> 태그 이용해 HTTP 요청 보냄
    -> HTTP 헤더인 Cookie에 이용자의 인증 정보가 포함됨

1> <img> 태그 이용

  • 이미지 크기 줄일 수 있는 옵션 이용
    -> 이용자에게 들키지 않을 수O

HTML img 태그 공격 코드 예시

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

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');

c.f.) location.href V.S. location.replace()

_ location.href location.replace()
기능 새로운 페이지로 이동 기존 페이지가 새로운 페이지로 바뀜
형태 속성 메소드
주소 히스토리 기록? O X
사용예 location.href='abc.php' location.replace('abc.php')



3. XSS v.s. CSRF

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

0개의 댓글