CSRF 공격기법은 Cross Site Request Forgery의 약자로 사용자를 속여서 의도치 않은 요청을 보내도록 하는 공격기법이다. XSS 공격기법은 클라이언트에서 악성코드가 실행이 된다면 CSRF 공격기법은 사용자가 서버에 의도치 않은 요청을 보내기 때문에 서버에서 악의적인 코드가 실행된다.
예시
# 이용자가 /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."
위의 예시는 https://learn.dreamhack.io/172에서가져온 코드이다. 위의 코드는 어떠한 검증과정이 없이 돈을 송금 보내는 코드이다. 만약 공격자가 위의 서버에 요청을 보내는 코드를 아래와 같이 작성하고 사용자가 해당 서버에 접속을 했다고 생각해 보자.
<img src='http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337' width=0px height=0px>
img 태그의 src를 이용해 사용자가 서버에 접속 시 http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337 링크에 요청을 보내게 되고 이용자의 의지와 상관없이 dreamhack에게 돈이 1337만큼 보내지게 된다.
'hacking > web' 카테고리의 다른 글
node.js serialize 취약점 (0) | 2023.04.24 |
---|---|
Node.js - prototype pollution (0) | 2023.04.24 |
Relative Path Overwrite (0) | 2022.12.06 |
DOM Clobbering (0) | 2022.12.06 |
CSP (0) | 2022.12.06 |