Cross Site Request Forgery : 교차 사이트 요청 위조
사이트간 요청을 위조하여 이용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정웹사이트에 요청하게 만드는 공격
- 이미 서명된 문서의 내용 조작
- 이용자 속여 의도치 않은 요청에 동의하게 하는 공격
- 그럴듯한 페이지 만들어서 입력 유도
공통점
- 클라이언트 대상 공격
- 이용자가 악성 스크립트 포함된 페이지 접속하도록 유도
차이점
- XSS : 인증 정보 탈취 목적 -> 사이트의 오리진에서 스크립트 실행
- CSRF
- 이용자가 임의 페이지에 HTTP 요청 보내는 것을 목적
- 공격자는 악성 스크립트 포함된 페이지에 접근한 이용자의 권한으로 웹 서비스의 임의 기능 실행 가능
서버 접속

csrf page

memo page

notice flag page

flag page









정리
- flag 값을 얻기 위해서는 /admin/notice_flagd 페이지에 userid 값이 admin인 client가 요청을 보내야함
- /flag page 에서는 CSRF 공격을 해야함
- /memo page에서 flag 확인
exploit 코드


서버 접속

csrf page

flag page

login page

반응 확인

결과




read_url 함수

check_csrf


/flag

/login

/change_password

정리
- admin으로 접속하면 Home page에 flag값이 뜬다
- /change_password의 pw값을 통해 admin의 비밀번호 변경
- 변경한 비밀번호로 로그인
코드

로그인

flag 획득

- CSRF tokens 사용
- Strict SameSite cookie restrictions 사용
세션 토큰과 비슷한 개념, 엔트로피가 높은경우 예측 불가
- 생성 : CSPRNG(Cryptographically Secure Pseudo-random Number Generator) 사용
- 전송 :
<input type="hidden" name="csrf-token" value="CIwNZNlR4XbisJF39I8yWnWX9wX4WFoz" />- 검증 : 요청시 토큰 없거나, 유효하지 않은 경우 거절
SameSite
- 크로스 사이트로 전송하는 요청의 경우 쿠키의 전송에 제한
- 정책 : None < Lax < Strict
- 기본적으로 Strict 정책 default, 특별한 경우에만 lax로 낮춤