Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
mysql-jdv-definer-sqli — MySQL Community Server 26.7.0 - 높음 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES | Kitploit
도구/GitHubGitHub/abraxas/mysql-jdv-definer-sqli
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingDatabase SecurityLabs & Practice
GitHubabraxas/mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

MySQL Community Server 26.7.0 - 높음 - JSON Duality DEFINER SQLi - NO_BACKSLASH_ESCAPES

저장소 보기
19일 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - mysql-jdv-definer-sqli

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  mysql-jdv-definer-sqli

mysql-jdv-definer-sqli

분류: SQLi 도달 범위: 원격

MySQL Community Server mysqld 26.7.0 (06a5c1c) - Oracle

JSON Duality DML은 JSON 문자열 값을 escape_string_for_mysql(백슬래시만)로 연결한 뒤, 뷰 DEFINER sctx로 전환한 후 호출자 sql_mode에서 parse_sql을 수행한다. SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'를 설정하면 \'가 SQL 리터럴을 종료시킨다. '를 포함한 JSON 문자열은 DEFINER로서 서브쿼리 / SET 목록을 주입한다. 실습: 뷰에 DML만 가진 호출자가 secret.s를 프로젝션된 name 컬럼으로 읽어들인다.

기본 CREATE VIEW는 DEFINER이다. X Plugin은 이미 해당 모드를 분기 처리한다. JDV는 그렇지 않다. 기능 게이트: JSON Duality View가 필요하다.

ID아직 CVE 없음
분류SQLi (DEFINER; RCE 아님)
도달 범위원격 (인증된 SQL; JSON Duality View에 대한 DML 필요)
CWECWE-89
CVSS높음: 8.1 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N
제품MySQL Community Server mysqld
영향받는 버전26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
인증인증됨; JSON Duality View에 대한 INSERT 또는 UPDATE
라이선스GNU Affero GPL v3.0
실습127.0.0.1 전용. 프로젝션된 $.name에서 증거 확인.

공격자가 할 수 있는 일

SQL SECURITY DEFINER JSON Duality View에 대한 DML을 보유한다. SET SESSION sql_mode='NO_BACKSLASH_ESCAPES'. JSON 값에 '가 포함된 문자열 필드를 (SELECT에서 얻은 etag로) UPDATE한다. 생성된 _utf8mb4 '...' 리터럴이 종료된다. 나머지 구문은 DEFINER로서 실행된다. 실습에서는 secret.s.note를 프로젝션된 name 컬럼으로 SELECT한다. secret.s에 대한 직접 SELECT는 1142이다.

해당 sql_mode가 없으면 동일한 JSON이 리터럴 이름으로 저장된다. 인용부호는 데이터로 남는다.

발견 방법

동일한 26.7.0 추적. 기본 데몬에서 미공개된 Crit/High는 없었다. JSON Duality DML은 여전히 값을 연결한다.

sbuf.append("_utf8mb4 '");
escape_string_for_mysql(&my_charset_utf8mb4_bin, ...);
sbuf.append(1, '\'');

create_sctx_guard는 run_substmt 전에 view_sctx를 설치한다. 호출자 sql_mode가 parse_sql이 보는 것이다.

잘못된 시도: 뷰 이름과 AS 사이의 SQL SECURITY DEFINER는 1064이다(기본값이 이미 DEFINER). 현재 행과 동일한 name은 건너뛴다(is_equal); 다른 값에 대해 주입하라. Etag가 필요하다.

실습

cd lab
./run.sh

이미지 mysql:26.7.0. 공개 포트 127.0.0.1:18640. 뷰 app.dv는 app.t 위에 DEFINER root@%. 비밀은 secret.s에 있다. 피해자는 뷰에 대해서만 SELECT/INSERT/UPDATE 권한을 가진다.

SUCCESS mysql-jdv-definer-sqli victim-secret=denied nbe-inject=yes view-has-witness=yes default-mode-inject=no dump=26.7.0 image=mysql:26.7.0 MYSQL-JDV-DEFINER-SQLI-WITNESS

수정 방법

JDV DML 문자열을 X Plugin이 이미 가진 것과 동일한 NO_BACKSLASH_ESCAPES 분기(escape_sql_quote vs escape_string_for_mysql)로 이스케이프하라. 생성된 INSERT/UPDATE를 매개변수화하라. DEFINER sctx에서 연결된 값을 parse_sql하지 마라.

참고 자료

  • github.com/mysql/mysql-server 태그 mysql-26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)
  • sql/json_duality_view/dml.cc append_json_dom / create_sctx_guard
  • 형제 팩: abraxas/mysql-mysqldump-show-tables-overflow · abraxas/mysql-mysqldump-tab-path · abraxas/mysql-mysqlbinlog-raw-path · abraxas/mysql-set-role-leftover
도구 다운로드