CSRF란
공격자가 사용자가 의도하지 않은 작업을 수행하도록 유도할 수 있는 웹 보안 취약점.
특징
- 공격자는 피해자의 브라우저를 이용해 인증된 세션 쿠키를 자동으로 전송하게 만들어서 피해자 대신 요청을 실행
- 공격자의 링크를 피해자가 클릭하면 로그인된 상태에서 세션이 이용되어 이메일 주소→공격자 계정
작동 조건
- 중요한 행동 - 공격자가 유도할 만한 행동 있어야 함 ex) 비번/이메일 변경
- 사용자 식별 정보를 쿠키에 담긴 세션ID 하나에만 의존
- 예측 가능한 요청 - 요청에 무작위 토큰이나 값이 없음 → 공격자 쉽게 요청 생성 가능
공격 시나리오
사용자가 웹사이트에서 이메일 변경 버튼을 눌렀을 때 서버로 실제 HTTP 요청 →서버는 쿠키값을 보고 요청자 판단 → 공격자가 요청 HTML을 자기 사이트에 올려 피해자 방문 유도 → 스크립트가 즉시 submut을 호출하여 자동 POST 요청 → 표면상 정상 요청과 동일하지만 email값이 공격자가 원하는 값으로 변경.
브라우저가 쿠키 자동 포함 특성으로 공격자는 인증된 요청 위조 가능 → 계정 탈취로 연결 가능
방어 방법
- CSRF 토큰
- SameSite Cookie
- Referer-based Validation
XSS vs CSRF
| XSS | CSRF |
| 양방향 | 단방향 |
| 브라우저 안에서 실행 -> 요청 및 응답 모두 제어 가능 | 요청을 보낼 수 있지만 응답 볼 수 없음 |
실습
Lab: CSRF where token validation depends on request method | Web Security Academy
Web Application Security, Testing, & Scanning - PortSwigger
PortSwigger offers tools for web application security, testing, & scanning. Choose from a range of security tools, & identify the very latest vulnerabilities.
portswigger.net

문제에 접속한 뒤 로그인창에 설명에 나와있는 아이디와 비밀번호를 로그인한다. 그럼 해당 아이디의 이메일이 뜨는데 이메일을 변경하는 창에 아무 이메일을 치고 버프 스위트를 켠 뒤 변경 버튼을 눌러 패킷을 확인하면 해당 사진이 나오는 것을 확인할 수 있다.

이메일 변경하는 부분을 repeater로 보내서 request로 변경하면 post→GET 요청이 되고 아까 입력했던 이메일 주소가 뜬다.

다시 로그인 창으로 돌아가면 변경된 이메일이 뜨는 것을 확인할 수 있다.

이제 다시 버프 스위트로 돌아가 HTTP history에서 이메일 변경했던 url 을 복사하여 body 부분 from action 뒤에 붙여넣고 value 부분에는 내가 변경할 새로운 이메일 주소를 입력한다. 해당 코드는 문제 solution 부분에서 찾을 수 있다.

view exploit을 누르면 내가 입력한대로 이메일 주소가 변경된 것을 확인할 수 있다.
과제
Web Application Security, Testing, & Scanning - PortSwigger
PortSwigger offers tools for web application security, testing, & scanning. Choose from a range of security tools, & identify the very latest vulnerabilities.
portswigger.net

문제에서 제공한 아이디와 비밀번호를 입력하면 이메일이 뜬다. 밑에 아무 이메일을 입력한 뒤 버프스위트를 켜고 update email을 누른다.

이메일 변경 패킷을 확인한 뒤 해당 패킷을 repeater로 보내고 csrf 토큰을 지우고 send한다.

다시 로그인 창으로 돌아가면 이메일이 바뀐 것을 확인할 수 있다.

exploit 서버로 들어가 문제에서 제공한 코드를 붙여 넣고 change email부분 url을 넣은 뒤 바꿀 이메일을 입력한다.

view exploit 을 눌러 확인해보면 내가 입력한 이메일로 변경된 것을 확인할 수 있다.
'웹해킹' 카테고리의 다른 글
| Authentication vulnerabilities (0) | 2025.11.11 |
|---|---|
| XSS (0) | 2025.11.05 |
| Path traversal (0) | 2025.10.28 |
| Command injection (0) | 2025.09.30 |
| SQL Injection (0) | 2025.09.24 |