250x250
Notice
Recent Posts
Recent Comments
관리 메뉴

탁월함은 어떻게 나오는가?

Session-Hijacking (세션-하이젝킹) 본문

[Snow-ball]프로그래밍(컴퓨터)/여러가지

Session-Hijacking (세션-하이젝킹)

Snow-ball 2025. 9. 17. 13:28
반응형

 

실습 계기

보안 공부를 하며, 세션 쿠키의 취약성을 직접 이해해보기 위해 진행했다. 해당 테스트를 진행하며 공용 와이파이, HTTP 환경 등에서 세션 탈취 위험이 존재함을 실제로 체감 할 수 있었다.

 

 

Session Hijacking 개념 정리

- 세션 기반 로그인 동작 방식 ( 로그인 > 서버가 Session cookie 발급 > 요청마다 쿠키 포함)

- 공격자는 세션 쿠키를 훔쳐서 로그인 상태를 위조할 수 있게 된다.

- 주요 공격 방식: Packet Snigging(패킷  도청), Cross-site scripting(XSS), Man-in-the-middle attack(중간자 공격) 등

 

핵심: 세션 쿠키(=Session ID, SID) 만 확보되면 비밀번호 없이 로그인 상태 재현이 가능하다.

 

 

 

 코드 및 테스트 과정, 결과

1) 서버 코드 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import express from "express";
import cookieParser from "cookie-parser";
 
const app = express();
app.use(cookieParser());
 
const sessions = {};
 
// 로그인 시 쿠키 발급
app.get("/login", (req, res) => {
  const sid = Math.random().toString(36).slice(2);
  sessions[sid] = "userA";
 
  res.cookie("SID", sid, { httpOnly: false }); // 의도적으로 httpOnly 비활성화
  res.send("로그인 완료");
});
 
// 로그인 상태 확인
app.get("/me", (req, res) => {
  const sid = req.cookies.SID;
 
  if (sessions[sid]) res.send(`현재 사용자: ${sessions[sid]}`);
  else res.status(401).send("로그인 필요");
});
 
app.listen(3000, () => {
  console.log("서버 실행 중: http://localhost:3000");
});
cs

 

 

2) SID 를 Application에서 쿠키 확인 할 수 있다.

 

3) 또는 Console에서 JS 문법으로 접근이 가능하다.

 

 

3-1) httpOnly: true 를 적용하면 JS에서는 접근 불가능 확인

 

 

4) 추출한 SID로 curl 명령어를 사용하면 로그인하지 않아도 정상적으로 출력되는걸 확인할 수 있다.

 

 

 


 

 

 

세션 쿠키 흐름도

 

 

 

 

 

깃허브 링크: https://github.com/akdl911215/Session-Hijacking-Test

 

 

반응형
Comments