在一次.net代码审计过程中发现web.config文件中数据库密码被加密了。于是记录下分析过程
配置文件中数据库密码看起来是经过base64编码的,直接base64解码无果,那应该是aes或者des
加密后对字节结果进行了base64。
代码都已经编译到了bin/dll中
反编译工具打开发现有些方法和代码被unicode编码了,需要去除混淆。
使用de4dot去除混淆
首先需要快速定位到相关入口点,因为肯定有某个点去读取这些全局配置,读取那肯定会使用参数名但是
使用password作为关键字的话那肯定不合适。
通过dbname则快速定位到了入口点。
ConfigurationManager.AppSettings["password"]; 读取web.config中password的字符串值 传入
Class1755.smethod_46方法中处理。
smethod_46方法中存在3套不同的解密key,如果初始key解密失败则尝试其他的key 跟进默
认Crypt3D.GetDesKey()中。
返回一个byte类型的数组。
抠出这段key保存。
在返回跟进 Crypt3DES.DeCryptFmBase64String
跟入Crypt3DES.crypt3DESSClass_0.DeCryptFmBase64String
跟入this.DeCryptToString
抠出这段核心解密代码
改成静态方法、删除所有this,using添加所需要的命名空间
补全缺失的数组即可。
解密函数已经扣完,开始调用。
解密函数需要传入两个byte数组,base64解码后的字节数组和deskey数组,deskey数组就是key
之前已经保存了。
解密小工具就完成了,成功手动的解出web.config加密的值。