OPEN HYPER STEP
← 목록으로 (화이트햇 보안)
SECURITY · 63 / 84
security
CHAPTER 63 / 84
읽기 약 2
FUNCTION

세션과 쿠키 분석


핵심 개념

웹 애플리케이션의 인증 상태를 유지하는 세션/쿠키의 동작 원리와 취약점을 분석한다.

본문

requests.Session() — 쿠키 자동 유지

PYTHON📋 코드 (14줄)
# ⚠️ 이 코드는 허가된 환경에서만 사용하세요.
import requests

# 단일 요청 — 매번 새 연결, 쿠키 리셋
r = requests.get('https://httpbin.org/cookies/set/visited/yes')
r2 = requests.get('https://httpbin.org/cookies')  # 쿠키 없음

# Session — 쿠키 자동 유지 + 연결 재사용 (성능 ↑)
s = requests.Session()
s.headers.update({'User-Agent': 'WhiteHat/1.0'})

s.get('https://httpbin.org/cookies/set/sessionid/abc123')
r = s.get('https://httpbin.org/cookies')
print(r.json())  # {'cookies': {'sessionid': 'abc123'}}

쿠키의 보안 플래그

PYTHON📋 코드 (17줄)
def analyze_cookies(url: str) -> list[dict]:
    """Set-Cookie 헤더의 보안 플래그를 분석."""
    s = requests.Session()
    r = s.get(url, timeout=5, allow_redirects=False)

    results = []
    for cookie in s.cookies:
        results.append({
            'name': cookie.name,
            'domain': cookie.domain,
            'path': cookie.path,
            'secure': cookie.secure,
            'httponly': cookie._rest.get('HttpOnly') is not None,
            'samesite': cookie._rest.get('SameSite', 'None'),
            'expires': cookie.expires,
        })
    return results

보안 플래그의 의미

플래그효과누락 시 위험
SecureHTTPS에서만 전송HTTP에서 쿠키 탈취
HttpOnlyJS에서 접근 불가XSS로 세션 탈취
SameSite=Strict외부 사이트 요청 시 미전송CSRF 공격
Domain 제한특정 도메인만서브도메인 탈취
Expires만료 시간세션 영구 유지 위험

로그인 폼 자동 전송

PYTHON📋 코드 (23줄)
# DVWA(Damn Vulnerable Web App) 같은 학습용 환경에서만!
def auto_login(login_url: str, username: str, password: str) -> requests.Session:
    s = requests.Session()

    # 1. 로그인 페이지 GET → CSRF 토큰 추출
    r = s.get(login_url, timeout=5)
    # 실제로는 BeautifulSoup으로 <input name="csrf"> 찾기 (다음 챕터)

    # 2. 로그인 POST
    r = s.post(login_url, data={
        'username': username,
        'password': password,
        # 'csrf_token': extracted_token,  # 다음 챕터에서
    }, timeout=5, allow_redirects=True)

    # 3. 로그인 성공 여부 판단
    if 'Logout' in r.text or r.url.endswith('/dashboard'):
        return s  # 세션 반환 → 이 세션으로 인증 필요한 페이지 접근
    raise PermissionError('로그인 실패')

# 사용 (DVWA 로컬 실행 가정)
# session = auto_login('http://localhost/login.php', 'admin', 'password')
# r = session.get('http://localhost/admin/users')

세션 고정 공격 (Session Fixation)

PYTHON📋 코드 (20줄)
# 공격 시나리오
"""
1. 공격자가 세션 ID를 미리 가짐: sessionid=ATTACKER123
2. 피해자에게 그 세션 ID로 로그인하게 만듦
3. 피해자가 로그인하면 → 그 세션이 인증된 상태가 됨
4. 공격자가 같은 세션으로 접근 → 피해자 행세

방어: 로그인 직후 반드시 세션 ID를 새로 발급해야 함
"""

def detect_session_renewal(login_url: str, creds: dict) -> bool:
    """로그인 전후 세션 ID가 바뀌는지 점검."""
    s = requests.Session()
    s.get(login_url)
    before = s.cookies.get('sessionid') or s.cookies.get('PHPSESSID')

    s.post(login_url, data=creds)
    after = s.cookies.get('sessionid') or s.cookies.get('PHPSESSID')

    return before != after  # True여야 안전

⚠️ 책임 있는 분석

  • 자기 계정의 쿠키만 분석
  • 학습용 환경(DVWA, Juice Shop, TryHackMe)에서만 자동화
  • 운영 사이트의 쿠키 탈취·세션 고정은 명백한 불법

AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 웹앱의 Set-Cookie 헤더를 분석해서
Secure/HttpOnly/SameSite 누락과
세션 재발급 누락 위험을 점검해줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

requests.Session()으로
DVWA·Juice Shop 같은 학습 환경에 자동 로그인하는
실전 코드를 보여줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 사이트의 모든 인증 흐름(로그인/로그아웃/비번 재설정)에 대해
쿠키 보안 종합 리포트를 만들어줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 SameSite=Lax가 기본값이 된 이후
CSRF 공격 양상이 어떻게 바뀌었는지 솔직히 알려줘.

⭐ 이것만 기억하세요
세션과 쿠키 분석 이 3가지만 확실히 잡으세요
1.Session()으로 쿠키를 자동 유지하면 인증 필요한 워크플로우를 자동화할 수 있다
2.Secure/HttpOnly/SameSite 3대 플래그는 쿠키 보안의 첫 점검 항목이다
3.다음 챕터에서 REST API 엔드포인트를 체계적으로 탐색하는 방법을 배운다


공유하기
진행도 63 / 84