웹해킹

CSRF

bbostudyy 2025. 11. 19. 14:52

CSRF란

공격자가 사용자가 의도하지 않은 작업을 수행하도록 유도할 수 있는 웹 보안 취약점.

 

특징

  • 공격자는 피해자의 브라우저를 이용해 인증된 세션 쿠키를 자동으로 전송하게 만들어서 피해자 대신 요청을 실행
  • 공격자의 링크를 피해자가 클릭하면 로그인된 상태에서 세션이 이용되어 이메일 주소→공격자 계정

작동 조건

  • 중요한 행동 - 공격자가 유도할 만한 행동 있어야 함 ex) 비번/이메일 변경
  • 사용자 식별 정보를 쿠키에 담긴 세션ID 하나에만 의존
  • 예측 가능한 요청 - 요청에 무작위 토큰이나 값이 없음 → 공격자 쉽게 요청 생성 가능

공격 시나리오

사용자가 웹사이트에서 이메일 변경 버튼을 눌렀을 때 서버로 실제 HTTP 요청 →서버는 쿠키값을 보고 요청자 판단 → 공격자가 요청 HTML을 자기 사이트에 올려 피해자 방문 유도 → 스크립트가 즉시 submut을 호출하여 자동 POST 요청 → 표면상 정상 요청과 동일하지만 email값이 공격자가 원하는 값으로 변경.

 

브라우저가 쿠키 자동 포함 특성으로 공격자는 인증된 요청 위조 가능 → 계정 탈취로 연결 가능

 

방어 방법

  1. CSRF 토큰
  2. SameSite Cookie
  3. 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을 누르면 내가 입력한대로 이메일 주소가 변경된 것을 확인할 수 있다. 

 

과제

https://portswigger.net/web-security/csrf/bypassing-token-validation/lab-token-validation-depends-on-token-being-present

 

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