본문 바로가기

웹해킹

ClientSide: CSRF

CSRF는 Cross Site Request Forgery의 약자로 교차 사이트 요청 위조라는 뜻이다.

 

쿠키와 세션을 통해 이용자를 식별하는데 이를 탈취할 수 있다면 이용자의 권한으로 요청을 보낼 수 있다.

CSRF는 이를 이용해 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점이다.

공격자가 작성한 악성 스크립트를 이용자가 실행해야 하는데, 메일로 보내던가 게시글에 심어놓는 등의 방법이 있다.

 

HTML을 이용한 공격 방법

img 태그 또는 form 태그를 이용해 요청을 보내면 이용자의 쿠키 인증 정보가 포함 되어서 요청이 보내진다.

 

javascript를 이용한 공격 방법

window.open으로 원하는 주소의 창을 띄우거나 location.href, location.replace로 주소를 원하는 주소로 바꿀 수 있다.

 

# 이용자가 /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=1000000000">

이런식으로 공격을 하면 누군가 게시글을 조회할 때마다 송금이 된다.

'웹해킹' 카테고리의 다른 글

드림핵 csrf-2 롸업  (0) 2023.11.04
드림핵 csrf-1 롸업  (0) 2023.11.03
드림핵 xss-2 롸업  (0) 2023.11.03
드림핵 xss-1 롸업  (0) 2023.11.03
Cross-Site-Scripting (XSS)  (0) 2023.11.03