로그아웃 후 예약 요청 다시 보내기

사이버 보안Beginner
지금 연습하기

소개

Fieldwork Studio 회원은 예약한 워크숍을 확인하고 예약 확인서를 다운로드할 수 있습니다. 팀은 Sign out this browser 기능을 추가했습니다. 로그인 페이지로 돌아가면 로그아웃이 된 것처럼 보이지만, 이전에 캡처한 세션이 여전히 작동하는지는 알 수 없습니다.

Kali의 Burp Suite Community Edition을 HTTP 프록시와 Repeater로 사용하여 원래 요청을 보관하고, 로그아웃 후 보호된 두 리소스를 모두 테스트합니다. 제출할 산출물은 비공개 요청·응답 증거와 비밀번호가 없는 짧은 수용 여부 판단입니다. 애플리케이션을 평가하며 서버를 수정하지는 않습니다.

기본적인 터미널 입력과 탭 전환만 알고 있다고 가정합니다. HTTP 응답, 쿠키, Burp 조작 방법은 실습에서 소개합니다. 모든 신원과 예약은 합성 데이터이며 제공된 환경은 격리되어 있습니다. 제공된 계정과 과정 대상만 사용하세요. 읽기와 일반적인 실수를 포함해 약 65분을 예상하세요. 이는 작성자의 추정치이며 초보자 실습으로 측정한 시간이 아닙니다.

회원의 실제 예약 확인하기

이 단계에서는 로그아웃을 테스트하기 전에 정상적인 사용을 확인합니다. Kali 터미널인 Auditor를 여세요. 시작 위치는 /home/labex/project입니다. cat은 텍스트 파일을 표시합니다. 제공된 허가 범위, 신원, 서비스 주소를 읽으세요.

cat scope.json

기본 URL은 http://members.test:8080/autumn입니다. 사용자 이름 morgan과 비밀번호 PaperDay!47을 사용하세요. 회원은 Morgan Reed이며 Printmaking의 P12 좌석을 예약했습니다. 느낌표도 비밀번호의 일부이므로 브라우저 양식에 그대로 입력하세요. 다른 신원이나 외부 사이트를 테스트하지 말고, 대상 데이터, 코드, 프로세스를 수정하지 마세요.

GUI 작업 공간에 Disconnected가 표시되면 상단의 Reconnect 버튼을 클릭하세요. 기존 창에 다시 연결되며 브라우저 쿠키, Burp 요청, 대상에서의 진행 상황은 유지됩니다.

Burp를 여세요. Burp Community는 이미 설치되어 있습니다. 시작 마법사에서 Temporary project를 선택한 상태로 Next를 클릭하세요. Use Burp defaults를 선택한 상태로 Start Burp를 클릭하세요. Burp Suite is out of date가 표시되면 OK를 클릭하여 준비된 교육용 버전으로 계속하세요. 기본 창이 나올 때까지 기다리세요. 임시 프로젝트는 실행 중인 작업 공간을 메모리에 유지합니다. 이 과정에서는 유료 디스크 프로젝트 기능 대신 명시적으로 XML을 내보내 증거 파일을 만듭니다.

Burp는 프록시입니다. 준비된 브라우저는 HTTP 요청을 Burp를 거쳐 보내므로 실제 통신을 살펴볼 수 있습니다. Burp에서 기본 탭 Proxy와 하위 탭 Intercept를 선택하세요. 버튼은 Intercept is off로 표시되어야 합니다. Intercept is on이면 한 번 클릭하세요. 가로채기를 켜면 요청이 일시 중지됩니다. 여기서는 기록을 남기면서 요청이 정상적으로 흐르게 해야 합니다.

LabEx의 Browser A 탭으로 전환하세요. Burp와 같은 감사 컨테이너 안에 준비된 Chromium 브라우저입니다. 주소 표시줄을 클릭하고 다음 URL을 입력한 뒤 Enter를 누르세요.

http://members.test:8080/autumn/

공개 워크숍 페이지를 읽고 View my booking을 선택하세요. 제공된 자격 증명을 Username과 Password에 입력하고 Sign in을 클릭하세요. Chromium이 비밀번호 저장을 제안하면 Never를 선택하세요. Your next day of making에 Morgan Reed, Printmaking, P12 좌석이 표시되어야 합니다.

Download booking을 클릭하세요. 실제 fieldwork-booking.csv에는 회원, 워크숍, 좌석이 들어 있습니다. Chromium 하단의 다운로드 표시줄에서 다운로드한 파일을 볼 수 있으며, Show all은 다운로드 목록을 엽니다. 공개 워크숍 탐색, 자신의 예약 확인, 이 다운로드는 보존해야 할 정상 기능입니다.

Morgan Reed의 확정된 Printmaking 예약과 Download booking 동작

다운로드하기 전에 예약 카드의 회원, 워크숍, 좌석을 확인하세요.

비밀번호가 틀리면 Sign-in unsuccessful와 try again 링크가 표시됩니다. 링크를 따라가 제공된 값을 다시 입력하세요. Page not found 응답은 경로가 잘못되었다는 의미이므로 위의 정확한 기본 URL로 돌아가세요. 브라우저 연결 오류는 애플리케이션 응답을 얻지 못했다는 뜻입니다. URL을 확인하고 Burp 마법사를 끝낸 뒤 가로채기가 꺼져 있는지 확인하세요. 연결 실패를 보안상의 거부로 간주하지 마세요.

Browser B는 다음 실습에서 사용할 독립 브라우저 프로필입니다. 여기서는 사용하지 마세요. 두 브라우저 탭과 Burp는 하나의 감사 컨테이너 안에 있는 창이며 별도의 가상 머신이 아닙니다. LabEx 탭을 전환해도 대상이나 작업은 초기화되지 않습니다.

Repeater에 원래 요청 보관하기

이 단계에서는 이미 성공한 요청을 보관합니다. Burp로 전환하고 Proxy, HTTP history를 차례로 선택하세요. members.test:8080에서 /autumn/account로 보낸 GET 요청을 찾으세요. 요청은 브라우저가 보내는 것이고 응답은 서버가 반환하는 것입니다. GET은 리소스를 읽습니다. HTTP 200 OK는 이 요청이 성공 응답을 받았다는 의미입니다.

계정 요청 행을 클릭하세요. 요청 편집기에서 Raw를 선택하고 Cookie 헤더를 찾으세요. 로그인하면서 studio_session이라는 세션 쿠키가 발급되었습니다. 브라우저는 이 값을 보내 인증된 세션을 식별합니다. 이전 쿠키를 가지고 있다는 조건에서 테스트하는 것입니다. 브라우저 쿠키를 지우고 쿠키 없는 새 요청을 시도하면 다른 질문을 검사하게 됩니다.

계정 요청 행을 마우스 오른쪽 버튼으로 클릭하고 Send to Repeater를 선택하세요. Repeater를 사용하면 보관한 요청을 다시 보내고 새 응답을 살펴볼 수 있습니다. 그런 다음 /autumn/booking.csv로 보낸 GET 요청을 찾아 마우스 오른쪽 버튼으로 클릭하고 Send to Repeater를 선택하세요. 기록 필터 때문에 CSV 요청이 보이지 않으면 표 위의 필터 표시줄을 클릭하고 Show all을 켠 다음, 필터 대화 상자를 닫고 정확한 경로를 다시 찾으세요. 행 위치만 보지 말고 호스트와 경로를 사용하세요.

기본 탭 Repeater를 선택하세요. 보낸 순서대로 첫 번째 번호 탭 1은 계정 요청이고 2는 예약 요청입니다. 1에서 대상이 http://members.test:8080이고 요청 줄이 GET /autumn/account HTTP/1.1이며 원래 studio_session 쿠키가 남아 있는지 확인하세요. Send를 클릭하세요. 응답 창에서 Raw를 선택하여 HTTP/1.0 200 OK와 예약 페이지 내용을 읽으세요.

2를 선택하고 Send를 클릭하세요. 200 OK, text/csv 콘텐츠 유형, 실제 예약 행이 나와야 합니다. 서버의 HTTP 버전은 요청과 다를 수 있습니다. 중요한 관찰은 상태와 실제 회원 예약 내용입니다.

보관한 두 요청은 같은 세션 쿠키를 사용해야 합니다. 보고서로 복사하지 말고 Burp 안에서 값을 비교하세요. 로그아웃하는 동안 이 두 Repeater 요청을 변경하지 마세요. 쿠키를 제거하거나 교체하지 말고, 대상을 바꾸거나 이 탭들로 로그아웃 요청을 보내지 마세요. 성공한 기준 상태가 있어야 이후 비교에 의미가 있습니다.

잘못된 기록 행을 보냈다면 해당 Repeater 요청 탭만 닫고 올바른 행을 보내세요. 정확한 요청은 경로로 식별하세요. 이때 탭 번호는 달라질 수 있습니다. 요청 탭을 닫는 것은 Burp를 닫거나 VM을 초기화하는 것과 다릅니다.

로그아웃 후 이전 쿠키 테스트하기

이 단계에서는 브라우저에서 보이는 로그아웃과 서버 측 세션 무효화를 구분합니다. Browser A로 전환하세요. 예약 페이지에서 Sign out this browser를 클릭하세요. 브라우저는 로그인 페이지인 Welcome back으로 돌아갑니다.

이 페이지 변화만으로는 서버가 이전 쿠키를 더 이상 받아들이지 않는다는 것을 입증할 수 없습니다. Burp로 전환하고 Repeater를 연 다음, 원래 계정 요청을 선택하여 Send를 다시 클릭하세요. 쿠키는 변경하지 마세요. 200 OK와 Morgan Reed의 예약 내용이 나와야 합니다. 이전 세션은 로그아웃 후에도 계정 접근을 허용합니다.

원래 예약 요청을 선택하고 Send를 다시 클릭하세요. 200 OK, text/csv, 같은 회원의 예약 행이 나와야 합니다. 이는 이전 쿠키로 얻은 실제 다운로드 성공 응답입니다. 성공한 것처럼 보이는 브라우저 페이지나 로그인 양식만 담긴 HTTP 200으로는 이를 입증할 수 없습니다.

현재 브라우저 로그아웃이 제대로 작동하려면 보관한 두 보호 요청은 대신 401 Unauthorized를 받아야 합니다. 이는 애플리케이션이 해당 세션을 거부한다는 의미입니다. 여기서는 서버가 두 리소스 모두에서 계속 받아들입니다. 관찰한 증거를 근거로 이 로그아웃 변경을 거부하세요. 애플리케이션의 모든 가능한 약점이 아니라 이 특정 세션 실패를 입증한 것입니다.

일반적인 사용이 여전히 가능한지 확인하세요. Browser A로 전환하고 morgan과 PaperDay!47로 다시 로그인하여 예약을 확인한 다음 Download booking을 클릭하세요. 새 세션이 발급되며 정상적인 회원 사용 흐름이 작동합니다. 원래 두 Repeater 요청의 쿠키를 교체하지 않은 상태로 Burp에 돌아오세요. 가장 최근 응답은 다음에 내보낼 로그아웃 후 응답으로 계속 남아 있어야 합니다.

로그아웃 후에도 Morgan Reed의 CSV를 반환하는 원래 예약 요청

왼쪽 Request 창의 변경되지 않은 Cookie를 오른쪽 Response 창의 200 OK 및 실제 회원 행과 비교하세요. 성공 상태만으로는 이 예약에 대한 접근을 입증할 수 없습니다.

실수로 원래 쿠키를 덮어쓰거나 보관한 두 요청을 모두 닫았다면 완전한 테스트를 반복하세요. 두 리소스에서 새 세션의 성공 응답을 캡처하고, 그 요청들을 보관하고, 해당 세션을 로그아웃한 뒤, 그 정확한 요청들을 다시 보내세요. 새 로그인 쿠키는 로그아웃한 세션의 쿠키를 대신할 수 없습니다.

비공개 증거와 명확한 판단 제출하기

이 단계에서는 평가에 자격 증명을 넣지 않으면서 실제 HTTP 증거를 저장합니다. Auditor로 전환하세요. 요청·응답 증거에는 사용할 수 있는 세션 쿠키가 들어 있으므로 저장 전에 접근을 제한하세요.

umask 077은 새로 만드는 파일과 디렉터리를 자신의 사용자만 접근할 수 있게 합니다. 이 터미널 세션에 적용되며 이후 모든 셸에 적용되는 것은 아닙니다. mkdir -p는 필요하면 지정한 디렉터리를 만듭니다. chmod 700은 소유자에게 읽기, 쓰기, 디렉터리 진입 권한을 주고 그룹과 다른 사용자에게는 권한을 주지 않습니다.

umask 077
mkdir -p evidence
chmod 700 evidence

Burp로 전환하고 Repeater에서 원래 계정 요청을 선택하세요. 현재 응답이 로그아웃 후의 200 OK 예약 페이지인지 확인하세요. Request 편집기 안에서 마우스 오른쪽 버튼을 클릭하고 Save item을 선택하세요. 이 기능은 요청과 응답을 함께 저장합니다. Copy to file은 다른 내용을 저장합니다.

Select a file 대화 상자의 File Name에 다음 절대 경로를 입력하세요.

/home/labex/project/evidence/account-after.xml

계정 증거의 절대 경로와 선택된 Base64 옵션이 표시된 Save item 대화 상자

하단 근처의 File Name 필드를 사용하세요. 선택된 Base64 옵션은 그 아래에 있습니다.

Base64-encode requests and responses를 선택한 상태로 Save를 클릭하세요. Base64는 XML 안에 원래 바이트를 안전하게 표현하는 방식이며 쿠키를 암호화하지는 않습니다. 성공 안내가 나타나면 OK로 닫으세요. 원래 예약 요청에 대해 Save item을 반복하고 다음 경로를 사용하세요.

/home/labex/project/evidence/booking-after.xml

Auditor로 전환하세요. chmod 600은 소유자만 각 파일을 읽고 쓰도록 합니다. ls -l은 권한을 표시하며, 두 XML 파일 모두 -rw-------가 나와야 합니다.

chmod 600 evidence/account-after.xml evidence/booking-after.xml
ls -l evidence

아래와 같이 비밀번호 없는 평가를 작성하세요. >는 지정한 파일을 덮어씁니다. <<'JSON'은 here-document를 시작합니다. 셸은 한 줄에 단독으로 있는 마지막 JSON까지 뒤따르는 줄들을 문자 그대로 복사합니다. 숫자 상태값에는 따옴표를 붙이지 않으며 JSON의 true는 불리언 값입니다. 이 보고서에 쿠키, 비밀번호, 원시 요청을 넣지 마세요.

cat > assessment.json <<'JSON'
{
  "decision": "reject",
  "account_after_logout": 200,
  "booking_after_logout": 200,
  "fresh_sign_in_works": true
}
JSON

평가를 읽어 일반적인 입력 실수가 없는지 확인하세요.

cat assessment.json

인계할 산출물은 두 개의 비공개 XML 항목과 이 평가입니다. 항목들은 원래 쿠키를 사용하는 요청과 실제 응답을 보존하며, 보고서는 비밀 정보를 반복하지 않고 근거 있는 판단을 전달합니다. 검증은 이 관계를 기존 서버 사실과 비교합니다. 누락된 로그인, 로그아웃, 재전송 트래픽을 대신 만들지 않으며 파일은 변경하지 않습니다. 공개 페이지 보존을 확인하는 일반적인 요청은 접근 기록을 추가할 수 있습니다.

파일 이름이 잘못되었다면 명시된 절대 경로로 Save item을 반복하고 chmod 600을 다시 적용하세요. 디렉터리가 바뀌었다면 pwd로 현재 디렉터리를 표시하고 cd /home/labex/project로 작업 공간에 돌아오세요. 누락된 증거를 손으로 쓴 성공 문구나 스크린샷으로 대신하지 마세요.

요약

실제 예약에 대한 기준 상태를 확인하고, 원래 쿠키를 사용하는 요청 두 개를 Burp Repeater에 보관한 다음, 로그아웃 후에도 서버가 두 요청을 모두 받아들인다는 것을 입증했습니다. 브라우저가 로그인 페이지로 돌아갔다고 해서 세션이 무효화된 것은 아니었습니다. 정상적인 사용 흐름을 보존하고, 비공개 HTTP 증거와 비밀번호를 포함하지 않은 거부 판단을 제출했습니다.

다음 실습에서는 수정된 배포를 살펴봅니다. 독립 브라우저를 통해 현재 세션을 끝내는 동작과 같은 회원의 모든 세션을 불필요하게 끝내는 동작을 구분합니다.