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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-52614 — Ruoyi v4.8.3 백엔드에 SQL 삽입 취약점이 존재합니다. | Kitploit
도구/GitHubGitHub/chinesespeople/cve-2026-52614
Password CrackingVulnerability AnalysisExploitationWeb Application ExploitationPenetration Testing
GitHubchinesespeople/cve-2026-52614

CVE-2026-52614

Ruoyi v4.8.3 백엔드에 SQL 삽입 취약점이 존재합니다.

저장소 보기
1111개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-52614 - RuoYi v4.8.3 filterKeyword 우회 SQL 인젝션

중국어 | 영어

권한 필요 / 승인된 테스트 전용
이 저장소는 보안 연구 및 승인된 테스트만을 위한 것입니다. 명시적 허가 없이 시스템에 사용하지 마십시오.
이 저장소는 보안 연구 및 명시적 승인을 받은 테스트에만 사용됩니다. 승인되지 않은 시스템에 사용하지 마십시오.

중국어 설명

취약점 개요

RuoYi v4.8.3 코드 생성 모듈의 /tool/gen/createTable 엔드포인트는 백엔드 사용자가 테이블 생성 SQL을 제출할 수 있도록 합니다. 이 엔드포인트는 SqlUtil.filterKeyword()를 호출하여 키워드 블랙리스트 필터링을 수행하지만, 구현상 입력에서 모든 공백 문자를 먼저 제거한 후에 후행 공백이 포함된 키워드(예: select , insert , drop )를 매칭하므로 관련 규칙이 적용되지 않습니다.

CREATE TABLE ... AS SELECT ... (CTAS) 문을 사용하면 Druid MySqlCreateTableStatement 타입 검사를 통과하면서 SELECT를 실행할 수 있습니다. 유효한 백엔드 세션을 가진 공격자는 이를 이용해 불리언 기반 블라인드 SQL 인젝션을 구성하고, 데이터베이스의 민감 정보를 읽고 데이터 테이블을 생성할 수 있습니다.

영향 조건

  • 대상은 RuoYi v4.8.3입니다.
  • 공격자는 백엔드에 로그인하여 유효한 JSESSIONID를 보유하고 있습니다.
  • 현재 계정은 코드 생성 모듈 관련 엔드포인트에 접근할 수 있습니다.
  • 데이터베이스 및 현재 데이터베이스 계정은 CTAS 테이블 생성 작업을 허용합니다.

취약점 원리

확인 스크립트는 다음 로직을 사용하여 sys_user 테이블에서 admin 사용자의 비밀번호 해시와 salt를 추출합니다.

  1. CTAS를 통해 중간 테이블을 생성하여 login_name, password, salt 필드를 복사합니다.
  2. 각 판정 문자에 대해 테스트 테이블을 생성하고 WHERE 절에 SUBSTRING() 조건을 추가합니다.
  3. 조건이 참이면 CTAS가 데이터를 반환하고, 테스트 테이블이 코드 생성 테이블 목록에 자동으로 임포트되지 않습니다.
  4. 조건이 거짓이면 CTAS가 0행을 반환하고, 테스트 테이블이 자동으로 임포트되어 /tool/gen/list를 통해 조회할 수 있습니다.
  5. 테스트 테이블이 목록에 나타나는지 여부를 기준으로 비밀번호 해시와 salt를 한 문자씩 복구합니다.

환경 요구 사항

  • Python 3.8+
  • 유효하고 승인된 RuoYi 백엔드 세션
  • Python 패키지: requests, urllib3

의존성 설치:

root@kitploit:~
python -m pip install requests urllib3

사용 방법

exp.py를 열고 파일 상단의 설정 영역에서 다음 두 줄을 바꿉니다.

root@kitploit:~
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"

여기서:

  • TARGET: 테스트할 RuoYi URL로 바꿉니다(예: http://127.0.0.1:8080).
  • COOKIE: 백엔드 로그인 후 얻은 유효한 JSESSIONID 세션으로 바꿉니다.

수정 후 직접 실행:

root@kitploit:~
python exp.py

스크립트는 대상 데이터베이스에 중간 테이블과 다수의 불리언 판정 테스트 테이블을 생성합니다. 격리되거나 승인된 환경에서만 사용하고, 테스트 완료 후 데이터베이스 관리자가 관련 테이블을 정리하도록 하십시오.

확인 스크린샷

exp.png는 로컬 승인 환경에서의 성공적인 확인 스크린샷입니다.

Successful verification

수정 제안

  • SQL 키워드 블랙리스트에 의존하지 말고, 사용자가 제출한 SQL을 직접 실행하지 마십시오.
  • filterKeyword()의 정규화 및 매칭 로직을 수정하되, 유일한 보안 통제 수단으로 취급하지 마십시오.
  • 코드 생성 엔드포인트에 엄격한 권한 제어, 감사 및 CSRF 보호를 적용하십시오.
  • 임의 SQL 테이블 생성을 금지하거나 제거하십시오. 업무상 필요하다면 구조화된 매개변수에서 고정 문을 구성하십시오.
  • 최소 권한 데이터베이스 계정을 사용하여 민감한 테이블 읽기 및 불필요한 CTAS/DDL 작업을 제한하십시오.
  • 공식 수정 버전으로 업그레이드하거나 공급업체의 보안 패치를 적용하십시오.

영어

개요

RuoYi v4.8.3의 코드 생성 모듈에 있는 /tool/gen/createTable 엔드포인트는 인증된 백엔드 사용자로부터 테이블 생성 SQL을 받습니다. 이 엔드포인트는 SqlUtil.filterKeyword()를 호출하여 위험한 SQL 키워드를 차단합니다. 그러나 구현에서는 입력에서 모든 공백을 제거한 후에 후행 공백이 포함된 블랙리스트 항목(예: select , insert , drop )을 확인합니다. 따라서 해당 항목들은 정규화된 입력과 일치할 수 없습니다.

CREATE TABLE ... AS SELECT ... (CTAS) 문은 Druid MySqlCreateTableStatement 유형 검사를 통과하면서도 SELECT를 실행할 수 있습니다. 유효한 백엔드 세션을 가진 공격자는 이 동작을 이용하여 불리언 기반 블라인드 SQL 인젝션, 민감 데이터 추출 및 테이블 생성을 수행할 수 있습니다.

사전 조건

  • 대상은 RuoYi v4.8.3을 실행 중입니다.
  • 테스터는 유효한 인증된 백엔드 JSESSIONID를 보유하고 있습니다.
  • 인증된 계정은 코드 생성 엔드포인트에 접근할 수 있습니다.
  • 데이터베이스 및 구성된 계정은 CTAS 작업을 허용합니다.

PoC 작동 방식

스크립트는 다음 오라클을 사용하여 sys_user에서 admin 비밀번호 해시와 salt를 복구합니다.

  1. login_name, password, salt를 포함하는 중간 테이블을 생성합니다.
  2. SUBSTRING() 조건과 함께 후보 문자당 하나의 테스트 테이블을 생성합니다.
  3. 조건이 참이면 CTAS가 행을 반환하고 테스트 테이블이 생성기 테이블 목록에 자동으로 임포트되지 않습니다.
  4. 조건이 거짓이면 CTAS가 0행을 반환하고 테이블이 자동으로 임포트되어 /tool/gen/list를 통해 표시됩니다.
  5. 이 차이를 사용하여 비밀번호 해시와 salt를 한 번에 한 문자씩 복구합니다.

요구 사항

  • Python 3.8+
  • 유효하고 승인된 RuoYi 백엔드 세션
  • Python 패키지: requests, urllib3

의존성 설치:

root@kitploit:~
python -m pip install requests urllib3

사용 방법

exp.py를 열고 파일 상단의 설정 섹션에서 다음 두 줄을 바꿉니다.

root@kitploit:~
TARGET = "http://127.0.0.1:8080"
COOKIE = "JSESSIONID=your_session_id"

여기서:

  • TARGET은 테스트할 RuoYi 기본 URL입니다(예: http://127.0.0.1:8080).
  • COOKIE는 유효한 인증된 백엔드 JSESSIONID 세션입니다.

URL과 세션을 바꾼 후 실행:

root@kitploit:~
python exp.py

스크립트는 대상 데이터베이스에 중간 테이블과 많은 불리언 테스트 테이블을 생성합니다. 격리되거나 명시적으로 승인된 환경에서만 사용하고, 테스트 후 데이터베이스 관리자가 생성된 테이블을 제거하도록 하십시오.

스크린샷

exp.png는 승인된 로컬 환경에서의 성공적인 확인을 보여줍니다.

Successful verification

완화 방안

  • SQL 키워드 블랙리스트에 의존하거나 사용자 제공 SQL을 직접 실행하지 마십시오.
  • filterKeyword()의 정규화 및 매칭 로직을 수정하되, 유일한 보안 통제로 취급하지 마십시오.
  • 코드 생성 엔드포인트에 엄격한 권한 부여, 감사 및 CSRF 보호를 적용하십시오.
  • 임의 SQL 테이블 생성을 제거하십시오. 필요한 경우 구조화되고 검증된 매개변수에서 고정 문을 구성하십시오.
  • 최소 권한 데이터베이스 계정을 사용하여 민감한 테이블을 읽거나 불필요한 CTAS/DDL 작업을 수행할 수 없도록 하십시오.
  • 공식 수정 릴리스로 업그레이드하거나 공급업체의 보안 패치를 적용하십시오.

파일

  • exp.py - 확인 스크립트
  • exp.png - 확인 성공 스크린샷
  • README.md - 중영 이중 언어 취약점 문서
도구 다운로드