jyamethyst21 님의 블로그

CSRF, 불충분한 세션 관리 취약점 본문

보안 & IT 지식 🌺

CSRF, 불충분한 세션 관리 취약점

jyamethyst21 2026. 4. 22. 23:41

본 게시물은 가상 사이트에서 진행한 모의해킹을 복기 차원에서 간단하게 정리한 내용으로, 저작권 등의 문제로 실제 진행한 구체적인 캡쳐 내용은 업로드가 어려움, 필자의 복습 차원에서 올린 게시물로서 참고만 해주시길 ...

1. CSRF 취약점 분석 및 실습

1) 페이지 구조 및 동작 방식

FORM

해당 페이지는 Form, Process 구조로 이루어져 있다.

VALUE값에 토큰값 존재


패킷을 분석해보면 csrf_token이 존재하며, 해당 페이지는 Form 페이지에서 발급된 csrf_token을 Process 페이지에서도 동일하게 사용한다. 즉, 토큰이 요청 단위로 재발급되지 않고 재사용되는 구조이다.

2) 공격 방식

공격은 XSS과 CSRF 결합 공격으로 이루어져있으며, 공격 순서는 다음과 같다.

  1. iframe을 이용해 관리자 페이지를 백그라운드에서 호출
  2. 브라우저는 자동으로 세션 쿠키 포함하여 요청
  3. 서버는 정상 사용자로 판단 → csrf_token 포함된 페이지 반환
  4. 자바스크립트로 iframe 내부 DOM 접근
  5. csrf_token 값을 추출
  6. 해당 토큰을 이용해 특정 사용자의 권한 변경 요청 수행

3) CSRF 취약점인 이유

CSRF의 핵심 조건은 다음과 같다.

 

(1) 인증 정보 자동 포함

  • 브라우저는 요청 시 쿠키 자동 전송
  • 서버는 이를 신뢰

(2) 요청의 정당성 검증 부족

  • 토큰이 존재하지만 재사용 가능하고 사용자/요청 바인딩이 없다.

결과적으로 사용자가 의도하지 않은 요청을 서버가 정상 요청으로 처리한다.

4) XSS와 CSRF의 관계

구분                                  XSS                                                                      CSRF
공격 대상 사용자 브라우저 서버
목적 스크립트 실행 요청 위조
실행 위치 클라이언트 서버 요청
인증 필요 불필요 필요 (세션 이용)
대표 영향 쿠키 탈취, DOM 조작 계정 변경, 권한 변경

 

본 실습에서의 XSS, CSRF 역할

  • XSS 역할
    • iframe 내부 DOM 접근
    • csrf_token 탈취
  • CSRF 역할
    • 탈취한 토큰으로 요청 위조
XSS = 토큰을 훔치는 도구
CSRF = 요청을 실행하는 공격

5) 취약점 원인

  1. 토큰 재사용 가능
  2. 토큰이 사용자/세션에 강하게 묶여있지 않는다.
  3. iframe + JS 접근 가능

2. Session / Cookie 취약점 분석

1) 로그인 후 세션 분석

로그인 화면

로그인 이후 BurpSuite에서 확인한 결과, 세션 ID가 존재하고 '%3D%3D'(==) 형태로 인코딩 되어있다.

'=='는 Base64 인코딩 적용 시 많이 보이는 형태로 디코딩 결과 사용자 계정 형태의 값을 확인할 수 있었다.

2) 취약점 핵심

해당 세션은 결과적으로 Base64로 인코딩된 값, 복호화 시 의미 있는 문자열(ID)이 노출되는 취약점을 갖는다.

세션이 단순 인코딩만 되어 있고 암호화가 되어있지 않는다는 점이 핵심 취약점이다.

 

3) 공격 과정

  1. 세션 값 확인
  2. Base64 디코딩 → 구조 파악
  3. 특정 패턴 유추
  4. 앞서서 디코딩한 것처럼 힌트에 나와있는 ID를 인코딩에서 Forward
  5. Flag 획득

4) 취약점 원인

세션은 원래 다음 조건을 만족해야 한다.

  • 예측 불가능
  • 의미 없는 랜덤 값
  • 서버 측에서만 관리

하지만 해당 시스템은 세션이 Base64 인코딩만 되어 있고 내부 값이 그대로 노출되어있다. 또한, 패턴 추론이 가능하고 세션 변조가 가능하다는 특징이 있기 때문에 해당 취약점을 이용하면 특정 사용자의 권한을 허가 없이 상승시킬 수 있다.