某OA密码加密方式分析
原创 zer0 2026-05-21 17:30 山东

某oa存在任意文件读取漏洞,第一个log文件中泄露了部分加密过的用户的登录密码等信息,对其密码进行分析破解。

声明:Tide安全团队原创文章,转载请声明出处!文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途给予盈利等目的,否则后果自行承担!

0x01 前情提要
某次xx的过程中,发现一个oa存在任意文件读取漏洞,可以查看log文件,第一个log文件中存储了部分用户的登录密码等信息,但登录密码是加密的
任意文件读取路径如下,可以看到泄露了加密后的密码
http://xxxxxx/log/20240527.txt

去cmd5查询无果
心想这可怎么办,恰好任意文件读取可以下载该网站的源码,那么就来分析一下吧

0x02 解密过程
拿到源码后,简单看下web.config文件,发现一个key,这里后面会用

继续查看其他代码
这里发现一个LoginFormIM.aspx文件,文件中又有一个key,说实话这个key看起来像个正常的key

通过观察代码可以发现,在第15行的代码中有个解密函数,是把encryptUserInfo参数使用key:task@msg进行解密,这里我感觉我找对了,继续往下看
这时我们要知道加解密用了什么算法,那么就得跟进DecryptU函数,直接在代码中搜索,这里直接搜索找不到DecryptU函数的具体方法,大概率是调用的dll文件,可以根据xxx.EAF.RDAS来推断出文件名大概是xxx.EAF.RDAS.dll或者xxx.EAF.dll
在bin目录下找到xxx.EAF.dll文件,使用dnSpy反编译一下
在xxx.EAF.RDAS.ServerInfo中找到DecryptU函数,可以看到加密使用了DES,ECB模式

到这你以为就结束了,其实不是
我试了task@msg和12345678这两个key,怎么都是解不出来
于是我一直怀疑是key错了,又在源码中找还有没有其他的key,找了一阵子确实没有其他的key,就继续来看代码是不是还有其他操作
继续分析Login.aspx文件,发现调用了RDAS.js,这个文件非常可疑,跟进看一下

通过前几行代码可以看到程序把所有的请求都发送给了Service.aspx这个文件

所以登录请求的处理应该都在这个文件中,但是找了一遍在源码中并没有发现这个文件
直接全局搜索一下,在web.config中找到了这个文件

可以看到在web.config中将Service.aspx的请求转给了xxx.ServiceHandler这个类来处理
那么继续来看下ServiceHandler类
ServiceHandler是程序的唯一入口点,它用来接受所有的前端请求并进行处理,在Process方法中,可以看到登录的具体方法

在这里text = serviceRequest.Get("RDASServiceName");获取服务名,text就是login
string[] array = ConfigurationManager.AppSettings["RDASIProcess"].Split(new char[] { ',' });ConfigurationManager用来访问配置文件,这里就是web.config
AppSettings用来读取<appSettings>配置节
所以这里就是来读取web.config中key为RDASIProcess的内容

MSYS.Process就是最终要找的处理登录加密的代码
那么继续找到MSYS.dll进行反编译
反编译继续分析login的代码,发现了一个加密密码的函数

跟进后发现一个加密函数,一个解密函数,很明显加密函数读取的是web.config中的passkey,也就是12345678,下面解密函数也证实了这一点

在解密函数中,程序不是直接用12345678来作为密钥直接解密,而是经过了ServerInfo.EncryptSpecialKey方法进行了处理,继续跟进
可以看到ServerInfo.EncryptSpecialKey方法最终的key是md5("ms@12345678168")取前8位


密钥最终为FBF591B2,这里有个坑点就是密钥是大写,跟进md5方法可以看到ToUpper方法将字母转换成大写

0x03 意料之外
最终解出超管的默认密码为aaaa,嗯?aaaa?我的字典里没有吗,后来发现字典里确实没有aaaa

后来又试了几个站点,基本都存在任意文件读取的问题,而且默认的key都是相同的。
往期推荐
E
N
D
