
호텔 및 관광 예약 시스템 1.0의 저장형 XSS 취약점에 대한 개념 증명으로, 인증되지 않은 주입과 관리자 세션 하이재킹을 시연합니다.
| 필드 | 세부 정보 |
|---|
| 제목 | 호텔 및 관광 예약 시스템 - 저장형 크로스 사이트 스크립팅(XSS) |
| CVE ID | 배정 대기 중 |
| 공급업체 | code-projects.org |
| 공급업체 URL | https://code-projects.org/hotel-and-tourism-reservation-in-php-with-source-code/ |
| 제품 | 호텔 및 관광 예약 시스템 |
| 버전 | 1.0 |
| 취약점 유형 | 저장형 크로스 사이트 스크립팅 |
| CWE | CWE-79 |
| CVSS 점수 | 8.3 (높음) |
| CVSS 벡터 | CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:L |
| 영향을 받는 엔드포인트(주입) | /ht/tour.php |
| 영향을 받는 엔드포인트(트리거) | /ht/admin/tour_reserves.php |
| 인증 필요 | 아니요(주입) / 예(트리거) |
| 원격 악용 가능 | 예 |
| 연구자 | Syed Imad Uddin Alvi |
호텔 및 관광 예약 시스템 1.0의 투어 예약 기능에 저장형 크로스 사이트 스크립팅(XSS) 취약점이 존재합니다. 인증되지 않은 공격자는 /ht/tour.php의 예약 양식 필드에 임의의 JavaScript를 주입할 수 있습니다. 악성 페이로드는 삭제(sanitization) 없이 데이터베이스에 저장됩니다. 관리자가 /ht/admin/tour_reserves.php에서 투어 예약 관리 페이지를 방문하면 저장된 페이로드가 관리자의 브라우저 컨텍스트에서 실행되어 세션 하이재킹, 자격 증명 탈취 또는 관리자 계정 전체 장악이 가능해집니다.
파일: tour.php (주입 지점)
파일: admin/tour_reserves.php (실행 지점)
매개변수: name , email , people , number / 연락처 필드 (POST)
저장소: hotel_db — 투어 예약 테이블
설정: XAMPP에 호텔 및 관광 예약 시스템 1.0을 설치하고 http://<target>/ht/에서 접속합니다.
1단계 — 인증되지 않은 사용자로 투어 예약 페이지로 이동:
http://<target>/ht/tour.php?tour=4
2단계 — 이름 필드 또는 XSS에 취약한 다른 필드에 XSS 페이로드를 입력한 후 Book Now를 클릭합니다:
<script>alert(1)</script>
결과: "Reservation successfully made!" — 페이로드가 이제 데이터베이스에 저장됩니다.

3단계 — 관리자로 로그인하고 투어 예약 패널로 이동:
http://<target>/ht/admin/tour_reserves.php
결과: 저장된 XSS 페이로드가 관리자의 브라우저 컨텍스트에서 즉시 실행됩니다.

인증되지 않은 공격자는 다음을 수행할 수 있습니다:
tour.php의 예약 양식은 사용자 입력을 삭제(sanitization) 없이 데이터베이스에 직접 저장합니다. tour_reserves.php의 관리자 패널은 저장된 값을 출력 인코딩 없이 HTML 응답에 원시(raw)로 출력하여 주입된 스크립트가 실행될 수 있게 합니다.
// 출력 시 — 렌더링 전에 항상 인코딩
echo htmlspecialchars($reservation['name'], ENT_QUOTES, 'UTF-8');
** Imad Alvi** — 독립 보안 연구원 GitHub: Xmyronn