Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-59712_CVE-2025-59713 — Snipe-IT PoC exploit for CVE-2025-59712 and CVE-2025-59713 | Kitploit
도구/GitHubGitHub/synacktiv/cve-2025-59712_cve-2025-59713
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingRed TeamingPayload Development
GitHubsynacktiv/cve-2025-59712_cve-2025-59713

CVE-2025-59712_CVE-2025-59713

Snipe-IT PoC exploit for CVE-2025-59712 and CVE-2025-59713

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
저장소 보기
2310개월 전아직 검토되지 않음

CVE-2025-59712 및 CVE-2025-59713에 대한 PoC

이 PoC는 CVE-2025-59712(User-Agent 헤더의 XSS)와 CVE-2025-59713(안전하지 않은 역직렬화)을 악용하는 자동화 스크립트를 제공합니다.

배경

이 두 취약점은 Snipe-IT 소프트웨어에 대한 취약점 연구 중 Synacktiv에 의해 발견되었습니다. Snipe-IT는 Laravel 기반의 오픈소스 자산 관리 시스템으로, 조직이 물리적 및 디지털 자산을 추적하고 관리할 수 있도록 설계되었습니다.

기술적인 분석 내용은 Synacktiv 웹사이트의 전용 보안 권고에서 확인할 수 있습니다.

모드

이 스크립트는 공격 모드에 해당하는 세 가지 하위 명령어(xss, rce, fullchain)를 제공합니다.

XSS

이 하위 명령어는 CVE-2025-59712를 악용합니다. 이 취약점은 낮은 권한의 사용자가 /reports/activity 라우트를 호출할 때 렌더링되는 HTML 페이지에 임의의 JavaScript를 주입할 수 있게 합니다. 이는 관리자 사용자 또는 보고서에 대한 명시적 보기 권한이 있는 사용자만 수행할 수 있습니다. 주입은 사용자가 프로필 정보를 업데이트할 때 User-Agent 필드가 적절히 무해화되지 않기 때문에 가능합니다.

이를 위해 먼저 낮은 권한의 사용자로 로그인한 다음, --javascript 플래그를 통해 제공된 파일에 정의된 JavaScript 코드를 주입합니다.

root@kitploit:~
$ python3 exploit.py xss --help

 Usage: exploit.py xss [OPTIONS]

 Execute XSS attack only with custom JavaScript payload

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged username [required]                                                                                                         │
│ *  --password    -p       TEXT                    Low-privileged password [required]                                                                                                         │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│ *  --javascript  -js      TEXT                    Path to custom JavaScript file [required]                                                                                                  │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

[!IMPORTANT]
보안 연구 중 테스트는 악성 JavaScript가 주입되는 User-Agent 필드가 기본적으로 표시되는 Snipe-IT 버전에서 수행되었습니다. 커밋 10e5d88 이후로는 작업 로그 테이블이 렌더링될 때 User-Agent 속성이 기본적으로 표시되지 않습니다. 따라서 이 커밋 이후 버전의 Snipe-IT에서 XSS를 트리거하려면 관리자가 보기 옵션에서 User-Agent 항목을 체크해야 합니다.

RCE

이 하위 명령어는 CVE-2025-59713을 악용합니다. 이 취약점은 관리자 또는 슈퍼관리자 사용자의 자격 증명을 알고 있을 때 원격 코드 실행을 가능하게 합니다. 이를 위해 다음 단계가 수행됩니다:

  1. Snipe-IT 인스턴스의 백업이 트리거됩니다.
  2. 생성된 백업을 다운로드하고, 메모리에서 편집한 후 다시 Snipe-IT에 업로드합니다. 백업 편집에는 db-dumps/mysql-snipeit.sql 파일에 추가 SQL 문이 포함되며, 이 SQL 문은 새 사용자 정의 필드를 생성하고 복원 시 Laravel pop chain을 포함한 JSON 객체로 마지막 작업 로그를 수정합니다.

[!TIP] 기본적으로 Snipe-IT는 백업에 .env 파일을 포함합니다. 스크립트가 이를 감지하면 APP_KEY 값을 표시하고 .env 파일을 ./output 디렉터리에 저장합니다(해당 파일의 사용자 지정 위치는 --output-dir로 지정할 수 있습니다).

  1. 편집된 백업에서 복원이 트리거되어 추가된 SQL 문이 실행됩니다.

[!CAUTION] 백업을 복원하면 인스턴스에 연결된 모든 사용자의 연결이 끊깁니다.

  1. 복원이 완료되면 /api/v1/reports/activity 라우트가 호출되어 역직렬화를 트리거하고 Laravel pop chain을 실행합니다.
root@kitploit:~
$ python3 exploit.py rce --help

 Usage: exploit.py rce [OPTIONS]

 Execute RCE attack only (requires existing admin account)

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --admin-user  -au      TEXT                    Admin username [required]                                                                                                                  │
│ *  --admin-pass  -ap      TEXT                    Admin password [required]                                                                                                                  │
│    --output-dir  -od      PATH                    Output dir for .env file [default: /home/ninja/Téléchargements/snipe-it-advisory/exploit/output]                                           │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Fullchain

fullchain 하위 명령어는 XSS와 RCE 취약점을 함께 연결하는 것을 목표로 합니다. 이는 낮은 권한의 사용자만 접근할 수 있고 원격 코드 실행을 달성하려는 시나리오에 해당합니다. 이 공격은 /reports/activity 페이지를 방문하는 사용자가 관리자 또는 슈퍼관리자인 경우에만 동작합니다. 실제로 데이터베이스를 오염시키고 이후 Laravel pop chain을 트리거하는 데 필요한 백업 생성 및 복원 권한은 이들 역할만이 가지고 있습니다.

이를 위해 스크립트는 다음을 수행합니다:

  1. 기본적으로 bash 역방향 셸을 실행하는 Laravel pop chain이 포함된 JavaScript 템플릿을 생성합니다(--command 플래그로 이 옵션을 RCE 모드와 동일하게 변경할 수 있습니다).
  2. 낮은 권한의 사용자로 로그인하고 User-Agent 필드에 <scr> 태그를 주입하여 피해자의 브라우저가 악성 JavaScript 템플릿을 로드하도록 강제합니다.
  3. 위에서 언급한 템플릿과 해당 종속성을 배포하기 위해 악성 HTTP 서버를 실행합니다.
  4. 관리자 또는 슈퍼관리자가 /reports/activity 라우트를 방문하면 XSS가 트리거되고 피해자의 브라우저에서 악성 JavaScript가 로드되어 실행됩니다. 이후부터는 RCE 모듈에서 실행되는 것과 동일한 단계가 JavaScript로 수행됩니다.
  5. 백업이 복원되면 피해자의 브라우저는 Python HTTP 서버에 GET 요청(콜백)을 보내 백업이 복원되었고 RCE를 트리거하는 API 라우트를 호출할 수 있음을 알립니다.

이 모드는 몇 가지 추가 JavaScript 라이브러리를 활용하며, 모든 크레딧은 해당 저자에게 있습니다:

  • crypto-js.js: 암호화 작업을 수행하는 데 사용되며, 원본 코드는 여기에서 찾을 수 있습니다.
  • jszip.js 및 jszip-utils.js: ZIP 파일의 메모리 내 편집을 수행하는 데 사용됩니다. 공식 저장소는 각각 여기와 여기에서 찾을 수 있습니다.
root@kitploit:~
$ python3 exploit.py fullchain --help

 Usage: exploit.py fullchain [OPTIONS]

 Execute full attack chain: XSS -> Backup manipulation -> RCE

╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮
│ *  --url         -u       TEXT                    Target Snipe-IT URL [required]                                                                                                             │
│ *  --login       -l       TEXT                    Low-privileged user's username [required]                                                                                                  │
│ *  --password    -p       TEXT                    Low-privileged user's password [required]                                                                                                  │
│ *  --new-name    -n       TEXT                    New name for low-privileged user [required]                                                                                                │
│    --ip          -i       TEXT                    HTTP server IP address (default: auto-detect)                                                                                              │
│ *  --port        -P       INTEGER                 HTTP server port [required]                                                                                                                │
│    --admin-user  -au      TEXT                    Admin username to create [default: admin_rce]                                                                                              │
│    --admin-pass  -ap      TEXT                    Admin password to create [default: password123]                                                                                            │
│    --shell-ip    -si      TEXT                    Reverse shell IP address                                                                                                                   │
│    --shell-port  -sp      INTEGER                 Reverse shell port                                                                                                                         │
│    --command     -c       TEXT                    Custom command (overrides reverse shell)                                                                                                   │
│    --proxy       -x       TEXT                    HTTP proxy (http://ip:port)                                                                                                                │
│    --verbose     -v       [quiet|normal|verbose]  Logging verbosity [default: normal]                                                                                                        │
│    --help                                         Show this message and exit.                                                                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯

설치

이 스크립트를 실행하려면 다음 명령어를 실행하세요:

root@kitploit:~
$ git clone https://github.com/synacktiv/CVE-2025-59712_CVE-2025-59713
$ cd CVE-2025-59712_CVE-2025-59713
$ python3 -m venv .venv && source .venv/bin/activate
$ python3 -m pip install -r requirements.txt

테스트 환경용 Dockerfile

스크립트를 시험하고 취약점 악용을 재현할 수 있도록 Dockerfile도 제공됩니다. 이 Dockerfile은 취약한 버전의 Snipe-IT를 가져와 php artisan으로 데이터베이스를 구성하고 두 명의 사용자를 설정합니다:

  1. 기본 비밀번호가 AdminPassword123!인 admin 사용자
  2. 기본 비밀번호가 LowPrivUser123!인 lowpriv 사용자

컨테이너를 실행하기 전에 .env 및 snipe-it.conf 파일을 Snipe-IT 인스턴스의 URL로 업데이트해야 합니다:

root@kitploit:~
$ sed -i 's|^APP_URL=.*|APP_URL=http://<IP>:<PORT>|' .env
$ sed -i 's|\(ServerName\s*\).*|\1http://<IP>:<PORT>|' snipe-it.conf

그런 다음 컨테이너를 실행할 수 있습니다:

root@kitploit:~
$ docker build . -t "snipe-it-cve"
$ docker run -p 80:80 --name "snipe-it-debian" snipe-it-cve:latest
도구 다운로드