web.config中connectionString的解密思路

Mr.Wu 174 0

最近在渗透的过程中遇到好几个web.config中的数据库连接信息被加密的情况,就是下面这种:

<add name="sqlconn" providerName="System.Data.SqlClient" connectionString="9A93A2D53B8675CD8B3AB3E28218A6FA97F4AF940E98108B989FC5A1427629937BB043CB6E6B00093217E96F208F2455CBC437A58F0D15FDCC223737269F75E4467DE217B6045B183C832CF83D3D8637CE6198A4AEE384A91465DC135FD73FBFBE92FD5B7972AB831AA5188DB5F2A0F6" />

在网上找了很久的文章,只看到这一篇:https://www.twblogs.net/a/5b9705f22b717750bda86de2

文章中的情况和我遇到的情况是一样的,思路就是对bin目录下的dll文件反编译拿到DES加密的密钥然后解密,

但是写的不够具体。在论坛里面搜索也看到很多大佬提供了类似的思路,但是没有找到一篇具体的解密过程的文章。(可能是我权限比较小或者搜索关键词不对,如果已经有类似的文章,哪位大佬可以贴出来学习一下)。

没办法,只能自己研究了。经过了一下午无数个看不懂的C#代码报错之后,终于拿到我了我想要的东西。思路大概是这样子的:

先反编译dll文件找到具体的解密函数和密钥,然后把解密的函数copy出来放在.Net环境中运行一遍拿到解密之后的字符串。

下面就是整个解密的过程:

第一步、反编译dll文件

这里我用到的是dnSpy这个反编译软件,比Reflector用起来爽多了。安装好软件之后直接打开从目标bin目录下面下载的dll文件。dll文件可能有很多个,这个时候可能需要我们全部打开一个个找。
打开之后是这样子的,左边的test就是我刚刚打开的dll文件:
(顺便说一下,我在实战中的dll里面有很多敏感信息,我懒得打码,所以文章中的所用到的dll文件是经过我自己修改后编译出来的dll文件给大家做演示。)

把test一层一层展开之后,就可以看到反编译出来的C#代码。我只会Python,所以这里面的代码也只能看个大概的意思,图中的Program就是一个类,下面的Encrypt、Decrypt就是具体的方法。当然在实战的过程中肯定不止这么一点东西,可能会让你眼睛都找瞎。

加解密函数的命名一般都是Encrypt、Decrypt啥的,实战中多留意这些关键词。图中上面的红框就是我们要找的加解密密钥,下面的红框是加密的函数,解密的我没有截出来。
加密函数接收两个字符串类型的参数,一个是要加密的明文,一个是加密密钥,最后返回加密之后的字符串。解密函数反之。

第二步、搭建.Net环境并运行解密函数

C#代码的编译和运行我这里用到的是VScode,关于VScode的安装以及如何新建一个项目,这里不多说,参考:https://blog.csdn.net/qq_40346899/article/details/80955788
其实可以直接用dnSpy运行dll文件的,但是我不会。。。。。。

上面我们已经找到了解密的关键函数,把VScode和C#环境搭建好之后我们开始调试运行代码,把反编译出来的解密函数copy过来,我这里只需要用到解密函数:

如果解密函数中的代码还嵌套了其他的函数,也一并复制过来,然后进行代码的缩进调整,还有处理各种报错,有一定编程基础的死点脑细胞肯定能解决。
然后我们在主函数中调用Decrypt这个函数,把web.config中加密之后的connectionString传进去:

最后我们调试运行代码既可以得到明文的数据库连接信息:

第三步

  • 大概的过程就是这样子了,其中的过程还是比较曲折的。还有几点,
  • 网上有说拿到密钥之后用DES解密的软件就能解,我建议还是自己跑一遍解密的函数,因为每一次遇到的加密函数的代码都有一些不同。
  • 还有一些加密的密钥并没有放在dll的某个函数中,而是放在配置文件里,通过dll读取这个配置文件拿到密钥,所以具体情况具体分析。
  • 实战中遇到的情况不太一样 ,这里只提供一种思路,如果各位有更好的方法,或者文章中有什么错误的地方,欢迎交流指导。

作者:thelma9999

广告

打赏
发表评论 取消回复
表情 图片 链接 代码

分享
微信
微博
QQ