.NET 实战Web.config数据库解密及逆向技巧

dot.Net安全矩阵 2024-07-08 12:33:04 阅读 53

干货满满,来自dotnet安全矩阵微信群一位师傅的投稿分享 

图片

图片

0x01 分析web.config

图片

分析配置文件发现以下特征:

<code>数据库连接字符串应该是经过(Base64编码+AES或DES等加密)算法混淆。connecttionString的上级节点中没有类似Encrypt的节点名称。

说明没有使用IIS内置的加密类:DataProtectionConfigurationProvider类 和 RsaProtectedConfigurationProvider类。查看整个web.config文件,没有在发现解密密钥之类的配置节点。

提示信息:因为IIS内置的DataProtectionConfigurationProvider类、RsaProtectedConfigurationProvider类的加密过程中使用了一个基于本机的密钥,所以会影响web应用的分发,所以可能不会使用这两个算法,所以一般开发者会使用DES等加解密算法在代码内部对配置字符串进行动态解密。

根据以上场景判断,数据库加密字符串没有使用IIS内置的加密方法,而是在程序内部使用了其他的解密方法。所以想在web源码中查找对应的解密函数和密钥,对数据进行解密。

0x02 快速定位源码文件

bin目录下有很多的dll文件,web目录下也有很多的aspx等代码文件。我们需要一种方法快速的去定位我们需要的函数对应的配置文件,而不是每个文件都进行翻阅。我们需要一种方式进行全局内容搜索,本示例中采用的是emeditor工具。更重要的是,需要知道应该搜索什么关键字来筛选代码文件。

图片

connectionStrings是.NET开发中的一种常见形式,我通过文心一言AI搜索了一个调用demo。

图片

参考实例中的对象名称,选取了如下几个搜索关键字:

​​​​​​​<code>gSystem.Configuration;using System.Data.SqlClient;ConfigurationManager.ConnectionStrings["conn"].ConnectionString;

图片

<code>全局搜索ConnectionString,采集到如下DLL文件:CODE\bin\Easy.FrameWork.dllCODE\bin\EntityFramework.dllCODE\bin\log4net.dllCODE\bin\System.Configuration.dll:CODE\bin\System.Data.dll: CODE\bin\System.Data.Entity.dll: CODE\bin\System.dll: CODE\bin\System.Web.dll: CODE\bin\System.Web.Entity.dll: CODE\bin\System.Web.Providers.dll: CODE\bin\XX.Utility.dll:

图片

开始也猜测内部使用了Des解密,因此也尝试搜索了Decrypt关键字和DESDecrypt关键字。全局搜索DESDecrypt,采集到如下DLL文件:CODE\bin\Easy.FrameWork.dll

0x03 使用dnSpy逆向DLL

使用dnSpy打开DLL文件,分析了好几个dll文件后,最终打开Easy.FrameWork.dll。成功搜索到desdecrypt关键字,搜索到解密函数和解密密钥。

图片

图片

提示:感觉System开头的DLL文件一般都是IIS内置的,优先级可以延后处理。Dll内部使用DESCryptoServiceProvider类实现解密,因此没有重写解密工具。直接使用了[dot.Net安全矩阵星球]的SharpofDecryptWebconfig.exe程序(非广告)进行了字符串解密。

图片

分析过该工具的函数,是使用DESCryptoServiceProvider类对字符串进行解密的。

图片

以上搜索方法的缺陷

1、主观的优先分析某个dll本身是个缺陷。对于不熟悉.net开发的人来讲,根本不知道写在哪个dll内,完全是看天意,如果一个关键字都没有搜索到,就得逐个dll逆向查看分析。

2、dnSpy不会使用怎么办?在所有dll文件中搜索,发现搜索DesDecrypt存在内容,但搜索Decrypt却没有(含字符串条件)。真的需要每次都在dnSpy内部进行搜索吗? 有没其他的处理办法呢?上文中开始其实查找了很久,就算只有几个dll进行分析,其实也耗费了一段时间。之所以耗费时间较多,其实问题也很明显,主要是没有熟悉使用dnSpy这个工具。如果能导出这些dll文件的源码,像审计java代码一样就好了。

经过测试 点击文件——>导出到工程 可以逆向的源码到sln项目中。

图片

直接在源码文件夹搜索关键字,很快就发现了解密密钥参数。但是依然存在缺陷,逐个dll解密也是很浪费时间的事情,需要寻找使用dnSpy批量dll逆向的方案。

图片

测试过程中发现,在dnSpy的目录下存在dnSpy.Console.exe程序。其中存在需要的批量逆向命令:dnSpy.Console.exe -o C:\out\path C:\some\path

图片

欢迎加入星球

为了更好地应对基于.NET技术栈的风险识别和未知威胁,dotNet安全矩阵星球从创建以来一直聚焦于.NET领域的安全攻防技术,定位于高质量安全攻防星球社区,也得到了许多师傅们的支持和信任,通过星球深度连接入圈的师傅们,一起推动.NET安全高质量的向前发展。经过运营团队成员商议一致同意给到师傅们最大优惠力度,只需199元就可以加入我们。

星球汇聚了各行业安全攻防技术大咖,并且每日分享.NET安全技术干货以及交流解答各类技术等问题,社区中发布很多高质量的.NET安全资源,可以说市面上很少见,都是干货。其中主题包括.NET Tricks、漏洞分析、内存马、代码审计、预编译、反序列化、webshell免杀、命令执行、C#工具库等等,后续还会倾力打造专刊、视频等配套学习资源,循序渐进的方式引导加深安全攻防技术提高以及岗位内推等等服务。

图片

图片

图片

图片

图片



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。