세션(Session) / 쿠키(Cookie) 관련 문제 풀이 정리
1. session basic
문제 정보
- 분류: Web Hacking
- 문제 설명:쿠키값에 저장된 session-ID값을 admin의 session-ID로 바꿔 ADMIN 계정으로 로그인 한다.
취약점
- 아무 계정으로 로그인하면 session-ID가 쿠키값에 저장되며, /admin으로 들어가면 admin의 session-ID가 노출된다.
풀이 과정
- ADMIN이 아닌 GUEST로 로그인 한 뒤 쿠키값에 session-ID를 저장한다.
- 도메인 뒤에 /admin을 입력하여 들어간 뒤, ADMIN의 session-ID값을 탈취한다.
- 탈취한 session-ID값을 쿠키에 넣어서 ADMIN으로 로그인 한 뒤, 플래그를 얻는다.
2. cookie
문제 정보
- 분류: Web Hacking
- 문제 설명:ADMIN이 아닌 계정으로 로그인 한 뒤, 쿠키값에 저장된 USERNAME값을 바꿔 ADMIN 계정으로 로그인 한다.
취약점
- COOKIE에서 USERNAME값을 ADMIN으로 바꾸면, ADMIN으로 로그인 된다.
풀이 과정
1.GUEST 계정으로 로그인한다.
2.쿠키값에 저장된 USERNAME을 GUEST에서 ADMIN으로 바꾼다.
3.ADMIN으로 로그인 후, 플래그를 확인한다.
3. session
문제 정보
- 분류: Web Hacking
- 난이도:
- 문제 설명: 쿠키와 세션으로 인증 상태를 관리하는 간단한 로그인 서비스. admin 계정으로 로그인에 성공하면 플래그 획득
취약점
- admin 계정의 세션은 서버 시작 시
os.urandom(1).hex()로 미리 생성됨 → 1바이트, 즉 00~ff 총 256가지의 경우의 수로 구성되어있다.
- ADMIN계정의 session-ID는 256가지 안에 있기에, snippet에서 자바스크립트로 자동화를 시켜서 session-ID를 찾을 수 있다
풀이 과정
- guest 계정으로 로그인해서 정상적인 sessionid 쿠키를 우선 발급받는다.
- Snippets에서 아래 스크립트 작성 후 실행
(async () => {
for (let i = 0; i < 256; i++) {
const sid = i.toString(16).padStart(2, '0');
document.cookie = `sessionid=${sid}; path=/`;
const res = await fetch('/', { credentials: 'same-origin' });
const text = await res.text();
if (text.includes('flag is')) {
console.log('sessionid =', sid);
console.log(text);
return;
}
}
})();
- 콘솔에서 admin과 일치하는 sessionid 값 확인
- Cookies에서 sessionid 값을 직접 수정
- 메인 페이지로 이동하여 admin으로 인식되어 플래그 노출 확인