当前位置: 首页 > article >正文

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

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.kler.cn/news/311854.html

相关文章:

  • 一文了解高速工业相机
  • ant vue3 datePicker默认显示英文
  • Spring Boot中配置图片资源通常涉及到静态资源的管理
  • 基于单片机的智能家居控制系统设计
  • python 爬虫 selenium 笔记
  • HarmonyOS开发实战(5.0)实现二楼上划进入首页效果详解
  • 典型的MVC设计模式:使用JSP和JavaBean相结合的方式来动态生成网页内容典型的MVC设计模式
  • 大数据框架常用端口号总结
  • 局域网视频
  • 【机器学习】经典数据集鸢尾花的分类识别
  • vue2.0+ts注册全局函数和几个递归查找
  • 前端vue-关于标签切换的实现
  • 【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24
  • 基于CNN的10种物体识别项目
  • Spark-ShuffleWriter-UnsafeShuffleWriter
  • react是什么?
  • 数据结构、STL
  • 私域直播平台带源码
  • FRIDA-JSAPI:Java使用
  • leetcode:字符串中的第一个唯一字符
  • YOLOv10轻量化快速涨点之改进AKConv
  • Linux:vim编辑技巧
  • 【STL】priority_queue 基础,应用与操作
  • C++ 头文件 .h和.hpp的介绍与区别
  • 深度学习常见面试题及答案(11~15)
  • [Linux]自定义shell详解
  • HTML/CSS/JS学习笔记 Day4(CSS--C1 选择器声明)
  • .dav视频文件及格式转换
  • HashMap高频面试知识点
  • 【Ubuntu】ubuntu如何使用ufw(Uncomplicated Firewall)管理防火墙?一文带你学会!