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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/adarshthakur14777-cyber/cve-2026-60137
Password AttacksVulnerability AnalysisExploitationWeb Application ExploitationInformation GatheringWeb SecurityPenetration TestingDatabase Security
GitHubadarshthakur14777-cyber/cve-2026-60137

CVE-2026-60137

wpsqli full SQLi extractor + dumper for CVE-2026-60137

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

wpsqli - WordPress SQLi 추출기 (CVE-2026-60137)

WordPress 코어의 author__not_in SQL 인젝션 취약점을 악용하는 빠르고 메뉴 기반의 데이터베이스 추출 도구입니다. 이 도구는 REST 배치 라우트 혼동(CVE-2026-63030)을 활용해 인증 없이 SQLi 싱크에 도달하여, 순수하게 데이터베이스 열거와 덤프에 집중합니다.


목차

  • 개요
  • 취약점 체인
  • 영향받는 버전
  • 기능
  • 설치
  • 사용법
  • 메뉴 옵션
  • 추출 모드
  • 성능
  • 법적 고지

개요

wpsqli는 WordPress 코어의 체인 취약점을 악용하여 인증 없이 데이터베이스에 SQL 인젝션을 수행할 수 있게 해주는 순수 Python 도구입니다. 배치 라우트 혼동(batch route confusion) 버그를 통해 WordPress REST API 검증을 우회하여 원시 문자열 페이로드를 WP_Query SQL 싱크에 직접 전달합니다.

이 도구는 속도와 유연성을 위해 설계되었습니다. 자동으로 UNION 기반 인밴드(in-band) 추출(즉시)을 시도하고, 실패하면 8-스레드 병렬 boolean-blind 추출로 전환하며, 필요 시 마지막으로 순차적 시간 기반(time-based) 추출을 사용합니다.


취약점 체인

이 도구는 인증 없는 데이터베이스 추출을 위해 두 개의 독립적인 취약점을 체인으로 연결합니다:

Bug A — author__not_in SQL 인젝션 (CVE-2026-60137)

위치: wp-includes/class-wp-query.php, WP_Query::get_posts()

author__not_in 매개변수는 입력이 배열(array)인 경우에만 absint() 정화(sanitization)를 적용합니다. 문자열이 전달되면 is_array() 가드를 건너뛰고, 문자열은 변경 없이 implode()를 통과한 뒤 SQL $where 절에 원시(raw) 상태로 연결됩니다.

root@kitploit:~
// Line 2404: guard only fires for ARRAYS
if ( is_array( $query_vars['author__not_in'] ) ) {
    $query_vars['author__not_in'] = array_unique( array_map( 'absint', $query_vars['author__not_in'] ) );
    sort( $query_vars['author__not_in'] );
}
// Line 2408: string passes straight through
$author__not_in = implode( ',', (array) $query_vars['author__not_in'] );
// Line 2409: raw interpolation
$where .= " AND {$wpdb->posts}.post_author NOT IN ($author__not_in) ";

Bug B — REST 배치 라우트 혼동 (CVE-2026-63030)

REST API posts 엔드포인트는 author_exclude를 author__not_in에 매핑하지만 이를 정수 type => 'array'로 선언하므로, 코어는 문자열을 강제 변환하거나 거부합니다. Bug B는 REST 배치 엔드포인트(/wp-json/batch/v1)의 역동기화(desynchronization) 버그를 악용하여 문자열을 검증 과정을 몰래 통과시킵니다. wp_parse_url()이 거부하는 잘못된 형식의 경로 프라이머(path primer)를 주입하면 WP_Error가 배치 요청 목록에 시드되어 $matches와 $validation의 동기화가 깨집니다. 이를 통해 뒤따르는 하위 요청이 매개변수 검증 없이 잘못된 핸들러로 전달될 수 있습니다.


영향받는 버전

주의사항: SQLi 싱크는 영구 객체 캐시(Redis/Memcached)가 사용 중이 아닐 때만 도달할 수 있습니다.


기능

  • 의존성 없음: 순수 Python 표준 라이브러리. pip install 불필요.
  • 3단계 추출:
    • UNION 기반: 가짜 wp_posts 행을 위조하여 단일 HTTP 요청으로 전체 문자열을 추출합니다(즉시).
    • Boolean-blind (병렬): UNION이 객체 캐싱으로 차단되면 8개의 병렬 스레드와 이진 탐색을 사용하여 문자당 약 7회의 요청으로 추출합니다.
    • 시간 기반 (순차): boolean 오라클이 행을 반환하지 않을 때의 폴백(fallback).
  • 전체 열거: 데이터베이스, 테이블, 컬럼을 나열합니다.
  • 테이블 덤프: 개별 테이블, DB의 모든 테이블, 또는 전체(nuclear) 덤프를 타임스탬프가 포함된 텍스트 파일로 덤프합니다.
  • 안전한 중단: 추출 중 Ctrl+C를 누르면 현재 쿼리를 중단하고 세션을 종료하지 않은 채 부분 결과를 반환합니다.
  • 세션 유지: 한 번 연결하면 대화형 메뉴를 통해 여러 쿼리를 실행할 수 있습니다.
  • URL 정화: 엔드포인트 중복을 방지하기 위해 호스트 입력에서 경로/쿼리를 자동으로 제거합니다.
  • 크랙 준비 완료 출력: 사용자 덤프는 hashcat -m 35500에 바로 사용할 수 있는 bcrypt 해시가 포함된 ID|user_login|user_pass 형식으로 출력됩니다.

설치

설치가 필요 없습니다. 다운로드하여 실행만 하면 됩니다:

root@kitploit:~
# Clone the repository
git clone https://github.com/AdarshThakur14777-cyber/CVE-2026-60137.git
# Navigate to directory
cd CVE-2026-60137

# Run
python main.py

요구 사항:

  • Python 3.8+
  • 외부 패키지 불필요(표준 라이브러리만)

사용법

대화형 메뉴를 실행합니다:

root@kitploit:~
python main.py

예시 세션

root@kitploit:~
============================================================
  WP SQLi Extractor v3 (CVE-2026-60137)
============================================================
------------------------------------------------------------
  CONNECTION
   0. Connect / Change target
   1. Check target (version + vuln confirm)
------------------------------------------------------------
  FINGERPRINTING
   2. MySQL version (@@version)
   3. Current database name
   4. Current DB user
   5. WordPress table prefix
   6. Dump wp_users (ID, login, pass hash)
   7. Custom SQL query
   8. Extract all fingerprints (2+3+4+5)
------------------------------------------------------------
  ENUMERATION
   9. List all databases
  10. List all tables (current DB)
  11. List columns of a table
------------------------------------------------------------
  DUMPING
  12. Dump a specific table
  13. Dump all tables (current DB)
  14. Full dump to file (all tables + all rows)
------------------------------------------------------------
  15. Exit
============================================================

Choice: 0
Target (https://example.com): https://target.com
Skip TLS verify? (y/N):
Sleep delay for time-based (default 3):

[*] Connecting to https://target.com ...
[+] Batch endpoint: https://target.com/wp-json/batch/v1
[*] WordPress version: 6.9.4 VULNERABLE
[*] Testing UNION-based extraction ...
[!] UNION not available — trying boolean blind (8 parallel threads) ...
[+] Boolean-blind mode active (8 threads, ~7 reqs/char)
[+] Time-based also works (0.69s vs 3.78s)

메뉴 옵션

연결

옵션설명
0대상에 연결(URL을 자동으로 정화)
1취약점 및 활성 추출 모드 확인

핑거프린팅

열거

옵션설명
9MySQL 서버의 모든 데이터베이스 나열
10현재 또는 지정된 데이터베이스의 모든 테이블 나열
11특정 테이블의 모든 컬럼 이름 나열

덤프

옵션설명
12단일 테이블 덤프(선택적 행 제한 및 파일 저장 포함)
13현재 데이터베이스의 모든 테이블 덤프
14전체(nuclear) 덤프 — 모든 테이블 + 모든 행을 타임스탬프 파일로

추출 모드

이 도구는 속도 순서대로 세 가지 추출 모드를 자동으로 시도합니다:

1. UNION 기반 (즉시)

post_title 컬럼에 추출된 값을 16진수로 인코딩(||..|| 마커로 감쌈)한 가짜 wp_posts 행을 위조합니다. REST API가 이를 응답에 그대로 반영합니다 — 단일 HTTP 요청으로 전체 문자열을 얻습니다.

  • 쿼리당 1회의 요청
  • 영구 객체 캐시가 활성화되지 않은 경우에만 동작
  • 결과 인코딩에 CONCAT(0x7c7c, HEX(CAST((<expr>) AS CHAR)), 0x7c7c) 사용

2. Boolean-Blind (병렬)

UNION을 사용할 수 없으면 8개의 병렬 스레드와 이진 탐색으로 각 문자를 추출합니다. boolean 오라클은 주입된 AND (condition)이 행을 반환하는지 확인합니다.

  • 문자당 약 7회의 요청 (8개 스레드로 병렬 처리)
  • ASCII 범위 32-126에 대한 이진 탐색
  • 추출 전 이진 탐색으로 문자열 길이 사전 스캔
  • 진행 상황을 완료된 문자 수로 표시

3. 시간 기반 (순차)

boolean 오라클이 행을 반환하지 않을 때(예: 게시된 글이 0개인 사이트)의 폴백입니다. IF(condition, SLEEP(N), 0)을 사용하여 응답 지연 시간에 참/거짓을 인코딩합니다.

  • 문자당 약 7 × sleep_delay 초 (순차)
  • 가장 느린 모드이지만 빈 데이터베이스에서도 동작

성능

예시 타이밍 (Boolean, 8 스레드)


법적 고지

이 도구는 공인된 보안 테스트 및 교육 목적으로만 설계되었습니다. 이 도구는 본인이 소유했거나 명시적인 서면 허가를 받은 시스템에 대해서만 사용해야 합니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다.

이 도구의 저자와 기여자들은 이 소프트웨어로 인해 발생하는 오용이나 피해에 대해 책임을 지지 않습니다. 사용에 따른 책임은 사용자 본인에게 있습니다


크레딧

  • 취약점 체인 발견: Adam Kues (Assetnote / Searchlight Cyber)
  • UNION 가짜 포스트 기법: sergiointel/wp2shell-poc (원작자)
  • 구현 참조 및 각색: Icex0/wp2shell-poc
  • 라우트 혼동 탐지 기법: Hadrian / Icex0

라이선스

이 도구는 교육 및 공인된 테스트 목적으로만 제공됩니다.

도구 다운로드
버전 범위상태
6.8.0 – 6.8.5SQLi 버그 존재하지만 체인 도달 불가(배치 혼동은 6.9.0에서 도입됨)
6.9.0 – 6.9.4취약 — 전체 무인증 체인
7.0.0 – 7.0.1취약 — 전체 무인증 체인
6.8.6패치됨 (SQLi)
6.9.5패치됨
7.0.2패치됨
7.1-beta2+패치됨
옵션설명
2MySQL 버전 추출 (SELECT @@version)
3현재 데이터베이스 이름 추출 (SELECT DATABASE())
4현재 DB 사용자 추출 (SELECT CURRENT_USER())
5WordPress 테이블 접두어 추출
6wp_users 테이블 덤프 (ID, 로그인, 비밀번호 해시)
7사용자 정의 SQL 쿼리 실행
8모든 핑거프린트를 순서대로 실행 (옵션 2-5)
모드쿼리당 요청 수속도사용 시점
UNION1즉시객체 캐시 없음, 컬럼 수 일치
Boolean (8 스레드)~7 × string_length / 8빠름UNION 차단됨, 행 존재
시간 기반~7 × sleep × string_length느림boolean 오라클용 행 없음
추출 항목문자 수요청 수시간
MySQL 버전~20~140~15초
데이터베이스 이름~15~105~12초
DB 사용자~25~175~20초
테이블 접두어~5~35~5초
wp_users 행 (200자)200~1400~2분