分析配置文件发现以下特征:
1、数据库连接字符串应该是经过(Base64编码+AES或DES等加密)算法混淆。
2、connecttionString的上级节点中没有类似Encrypt的节点名称。
说明没有使用IIS内置的加密类:
DataProtectionConfigurationProvider类
RsaProtectedConfigurationProvider类
3、查看整个web.config文件,没有在发现解密密钥之类的配置节点。
提示信息:
因为IIS内置的DataProtectionConfigurationProvider类、RsaProtectedConfigurationProvider类的加密过程中使用了一个基于本机的密钥,所以会影响web应用的分发,所以可能不会使用这两个算法。所以一般开发者会使用DES等加解密算法在代码内部对配置字符串进行动态解密。
根据以上场景判断,数据库加密字符串没有使用IIS内置的加密方法,而是在程序内部使用了其他的解密方法。
解密思路:
在web源码中查找对应的解密函数和密钥,对数据进行解密。
源码文件中,bin目录下有很多的dll文件,web目录下也有很多的aspx等代码文件。
需要一种方法快速的去定位我们需要的函数对应的代码文件,而不是每个文件都进行翻阅。
因此,需要一种方式进行全局内容搜索,本示例中采用的是emeditor工具。
最重要的是,需要知道应该搜索什么关键字来筛选代码文件。
参考实例中的对象名称,选取了如下几个搜索关键字:
using System.Configuration;
using System.Data.SqlClient;
ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
全局搜索ConnectionString,采集到如下DLL文件:
CODE\bin\Easy.FrameWork.dll
CODE\bin\EntityFramework.dll
CODE\bin\log4net.dll
CODE\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:
CODE\bin\XX.Utility.dll:
dnSpy/dnSpy: .NET debugger and assembly editor
https://github.com/dnSpy/dnSpy
使用dnSpy打开DLL文件,分析了好几个dll文件后,最终打开Easy.FrameWork.dll。
成功搜索到DesDecrypt关键字,搜索到解密函数和解密密钥。
提示:感觉System开头的DLL文件一般都是IIS内置的,优先级可以延后处理。
Dll内部使用DESCryptoServiceProvider类实现解密,因此没有重写解密工具。而是直接使用[dotNET安全矩阵]知识星球的解密工具SharpofDecryptWebconfig.exe(非广告)进行解密。
分析过该工具的函数,是使用DESCryptoServiceProvider类对字符串进行解密的,因此刚好用上,也可以参考如下代码重写一个工具。
1、 主观的优先分析某个dll本身是个缺陷。
对于不熟悉.net开发的人来讲,根本不知道写在哪个dll内,完全是靠老神棍掐指一算。如果一个关键字都没有搜索到,就得逐个dll逆向查看分析。
2、 dnSpy不会使用怎么办?
在所有dll文件中搜索,发现搜索DesDecrypt存在内容,但搜索Decrypt却没有(含字符串条件)。
真的需要每次都在dnSpy内部进行搜索吗? 有没其他的处理办法呢?
上文中开始其实查找了很久,就算只有几个dll进行分析,其实也耗费了一段时间。
之所以耗费时间较多,其实问题也很明显,主要是没有熟悉使用dnSpy这个工具。
如果能导出这些dll文件的源码,像审计java代码一样就好了。
经过测试 点击文件——>导出到工程
可以逆向的源码到sln项目中。
直接在源码文件夹搜索关键字,很快就发现了解密密钥参数。
但是依然存在缺陷,逐个dll解密也是很浪费时间的事情,需要寻找使用dnSpy批量dll逆向的方案。
问了一下文心一言AI,【使用dnSpy命令行模式进行反编译】,回答了一个错结果。
测试过程中发现,在dnSpy的目录下存在dnSpy.Console.exe程序。
批量逆向命令:
# 反编译目录中所有.NET文件并保存到C:\out\path
dnSpy.Console.exe -o C:\out\path C:\some\path
至此,解决了两个实战中.NET代码审计上的问题。
1、DESCryptoServiceProvider类加密配置文件的解密
2、实现批量dll文件的筛选和反编译。
在学习本文技术或工具使用前,请您务必审慎阅读、充分理解各条款内容。
1、本团队分享的任何类型技术、工具文章等文章仅面向合法授权的企业安全建设行为与个人学习行为,严禁任何组织或个人使用本团队技术或工具进行非法活动。
2、在使用本文相关工具及技术进行测试时,您应确保该行为符合当地的法律法规,并且已经取得了足够的授权。如您仅需要测试技术或工具的可行性,建议请自行搭建靶机环境,请勿对非授权目标进行扫描。
3、如您在使用本工具的过程中存在任何非法行为,您需自行承担相应后果,我们将不承担任何法律及连带责任。
4、本团队目前未发起任何对外公开培训项目和其他对外收费项目,严禁任何组织或个人使用本团队名义进行非法盈利。
5、本团队所有分享工具及技术文章,严禁不经过授权的公开分享。
如果发现上述禁止行为,我们将保留追究您法律责任的权利,并由您自身承担由禁止行为造成的任何后果。
END
如您有任何投稿、问题、建议、需求、合作、请后台留言NOVASEC公众号!
或添加NOVASEC-余生 以便于及时回复。
感谢大哥们的对NOVASEC的支持点赞和关注
加入我们与萌新一起成长吧!
本团队任何技术及文件仅用于学习分享,请勿用于任何违法活动,感谢大家的支持!!