解密.NET配置文件web.config

0x01 背景

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

9c8e0a9fed7278b8eeb89cd22af31d0f.png

图上可看出由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",解密后的结果如下图所示

3b0c7e515043f1f2f3e3521f1f363979.png

db5e361bc662f0e015b2018aca3ebd6f.png

0x04 RSAProtectedProvider

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

aspnet_regiis -pc "dotnetKey" -exp

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

fe347a3fd9469a7ffcfee9517629b0b0.png

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

6f81a494966be7c9769170b2be58db11.png

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

0fb7a30373866804496a535d5afe28a3.png

0x05 结语

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值