세션 보안 분석 (WEB-SE)
WEB-09 세션고정
WEB-SE 세션예측
세션만료
💡 실제 발견 사례: 고양도시관리공사 웹 취약점 진단 결과
- 세션 예측 (58p): PHPSESSID가 단순 숫자 증가 패턴으로 생성됨
- 세션 고정 (63p): 로그인 전후 세션 ID가 변경되지 않음 (session_regenerate_id 미호출)
- 불충분한 세션 만료 (60p): 로그아웃 후에도 세션이 유효함
실습: 개발자도구(F12) → Application → Cookies 에서 PHPSESSID 값을 확인하고,
로그인 전후 값을 비교해보세요.
현재 세션 정보
| 세션 ID | af9422e40ebf72f4ebc478925e53ad1b |
| 로그인 상태 | ❌ 로그인 안 됨 |
| 세션 쿠키 | PHPSESSID=af9422e40ebf72f4ebc478925e53ad1b |
| HttpOnly | ❌ 미설정 (JavaScript 접근 가능) |
| Secure | ❌ 미설정 (HTTP에서도 전송) |
| SameSite | ❌ 미설정 (CSRF 취약) |
📋 세션 예측 실습
세션 ID 패턴: sess_XXXX (XXXX는 숫자)
아래 버튼을 눌러 세션 ID가 어떻게 변하는지 관찰하세요:
📋 발견된 취약점 체크리스트
| # | 취약점 | 실습 방법 | KISA 기준 |
| 1 | 세션 고정 |
로그인 전후 PHPSESSID 비교 (변경 안 됨) |
U-09 |
| 2 | 세션 예측 |
세션 ID가 sess_1234 형태 — 10000개 이내 |
U-09 |
| 3 | 쿠키 보안 속성 |
HttpOnly/Secure/SameSite 미설정 |
U-10 |
| 4 | 세션 만료 |
로그아웃 후 세션 쿠키가 그대로 유효한지 |
U-06 |
사용자 목록
| ID | 사용자명 | 역할 |
| 1 |
admin |
user |
| 2 |
user1 |
user |
| 3 |
user2 |
user |
| 4 |
guest |
user |