解密.NET配置文件web.config

0x01 背景

近期有师傅反馈拿到了.NET web.config文件,发现含有数据库账密连接字符串所在的标签<connectionStrings>被加密了,导致看不到MSSQL账户和密码,如下图.

解密.NET配置文件web.config

图上可看出由DataProtectionConfigurationProvider类提供加密保护的,DataProtectionConfigurationProvider 使用windows内置的密码学技术加密的,除此之外.NET还提供了另一种RsaProtectedConfigurationProvider 使用RSA公钥加解密,以下内容将具体介绍基于这两类方式进行加解密。

0x02 配置

在.NET中有两种配置数据库连接代码的方式,它们分别是 appSettings 和 connectionStrings 。在使用 appSettings 和 connectionStrings 配置数据库连接代码时,可分别在 <configuration> 下添加如下代码

2.1 appSettings

<appSettings><add key="conn" value="server=服务器名;database=数据库名;uid=用户名;password=密码;"/></appSettings>

2.2 connectionStrings

<connectionStrings><add name="conn" connectionString="server=服务器名;database=数据库名;uid=用户名;password=密码" providerName="System.Data.SqlClient" /></connectionStrings>

0x03 DataProtectionProvider

使用.NET FrameWork自带的aspnet_regiis.exe将配置文件web.config中指定的标签进行加解密,aspnet_regiis 位于%WinDir%\Microsoft.NET\Framework\<versionNumber>目录下,提供了以下几个常用的参数,因为笔者这里用物理路径表示,所以未用到 -app

-pef 指定要加密的配置节,这里是 connectionStrings-app 指定该配置文件所在的虚拟目录-prov 指定要使用的提供程序,这里使用的是 DataProtectionConfigurationProvider

加密的命令 aspnet_regiis.exe -pef "connectionStrings" "D:\WebSite\test" -prov "DataProtectionConfigurationProvider",解密的命令 aspnet_regiis.exe -pdf "connectionStrings" "D:\WebSite\test",解密后的结果如下图所示

解密.NET配置文件web.config

解密.NET配置文件web.config

0x04 RSAProtectedProvider

使用 RSAProtectedConfigurationProvider类加解密web.config时,第一步需要创建名称为dotnetKey的RSA密钥容器,命令如下

aspnet_regiis -pc "dotnetKey" -exp

将创建好的配置项内容粘贴到web.config里,主要是在config文件中加入configProtectedData配置节点,这里注意一下此时的容器创建的name是dotnetProvider,如下图

解密.NET配置文件web.config

加密的命令 aspnet_regiis -pef "connectionStrings" "D:\WebSite\test" -prov "dotNetProvider",如图

解密.NET配置文件web.config

解密的命令 aspnet_regiis -pdf "connectionStrings" "D:\WebSite\test"。需要注意一点aspnet_regiis.exe运行所需的权限较高,必须是管理员权限才能调用,像上月底爆出的用友畅捷通的默认权限是足够的,但在通常的iis权限属于Users组,权限不够的,另外因为加密过程中使用了一个基于本机的密钥,这意味着解密过程必须在同一台计算机上完成才可以,所以通过任意下载文件下载web.config回本地是解不开的,如下图在IIS权限下执行解密命令返回空,未能解密,通常需要提权后才能解密。

解密.NET配置文件web.config

0x05 结语

.NET 还有很多加解密相关的知识内容,如果对这些技巧感兴趣的话可以多关注我们的博客、公众号dotNet安全矩阵以及星球,下一篇将继续分享 .NET相关的安全知识,请大伙继续关注。另外文章涉及的PDF和Demo以及工具已打包发布在星球,欢迎对.NET安全关注和关心的同学加入我们,在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事。