Dreamhack-web
CSRF
White_Bean
2023. 9. 19. 02:05
CSRF (Cross Site Request Forgery)
- 임의 이용자의 권한으로 임의 주소에 HTTP 요청을 보낼 수 있는 취약점
- 공격자는 임의 이용자의 권한으로 서비스 기능을 사용해 이득을 취할 수 있음
@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 "success"
else:
return "fail"
이 코드는 CSRF 취약점이 존재하는 코드
코드에서 예금주와 금액을 입력받고 바로 송금을 수행하는 코드로 비밀번호, OTP 등을 사용하지 않기 때문에
추가 인증 없이 해당 기능을 이용할 수 있는 취약점이 있다.
CSRF 동작
- CSRF 공격에 성공하기 위해서는 공격자가 작성한 악성 스크립트를 이용자가 실행해야 함
- CSRF 공격 스크립트는 HTML 또는 Javascript를 통해 작성할 수 있음
- img태그나 form태그를 사용하는 방법이 있으며 이 두 개의 태그를 사용해 HTTP 요청을 보내면 HTTP 헤더인 Cookie에 이용자의 인증 정보가 포함됨
XSS와 CSRF의 차이
XSS와 CSRF의 차이를 아는 것은 매우 중요함
- 공통점 : 두 개의 취약점은 모두 클라이언트를 대상으로 하는 공격이며, 이용자가 악성 스크립트가 포함된 페이지에 접속하도록 유도함
- 차이점 : 두 개의 취약점은 공격에 있어 서로 다른 목적을 가짐
- XSS는 인증 정보인 세션 및 쿠키 탈취를 목적으로 하는 공격이며 공격할 사이트의 오리진에서 스크립트를 실행
- CSRF는 이용자가 임의 페이지에 HTTP요청을 보내는 것을 목적으로 하는 공격이며 공격자는 악성 스크립트가 포함된 페이지에 접근한 이용자의 권한으로 웹 서비스의 임의 기능을 실행할 수 있음