攻下数字石大账号系统

2017.5.4 更新:漏洞已经修复,细节向公众公开。

今天晚上因为学校邮箱界面问题,在文溢电脑上登陆数字石大系统并展示了相关问题,随后文溢提出能不能猜到我的密码并修改。显然,他成功了,我重置了密码,但正是这次重置密码,让我们意外的发现了数字石大密码重置系统的一个安全漏洞。

我们首先进入数字石大,找回密码,并选择通过邮箱方式找回密码。(我的账号在之前已经绑定过邮箱)

攻下数字石大账号系统

很快,我的邮箱便收到了来自邮件系统的邮件,

攻下数字石大账号系统

初阅读邮件,我们感觉,对于重置密码过程,仍旧在使用HTTP方式而非HTTPS是一种非常不妥的方式,极易给中间人劫持创造条件。此外,我们也发觉,对于身份信息的确认似乎是通过「data=」后面的参数来实现的。文溢告知我后面的加密字符是32位,并根据后面大小写混合的形式,我们猜测可能是某种信息的加密。

我们初步猜测明文应该是学号信息,并将我们的学号采用了一系列不可逆加密进行测试,令我们失望的是,并没有然后的密文与我们邮件中的字符串是一致的。从MD5一直试到SHA-1,再到Base64,我们终于发现了一丝曙光。Base64对学号加密的密文和我们邮件中的字符串的前半部分完全一致。

因为Base64是一种基于64个可打印字符来表示二进制数据的表示方法,其解密过程并不复杂,可以非常容易的执行逆运算,我们尝试着将邮件中的字符串进行解密:

攻下数字石大账号系统

经过解密我们发觉,明文实际上就是我们的学号:一串看似无意义的数据,而文溢凭借敏锐的直觉告诉我,后面的一串数字可能是Unix时间戳,然后我们尝试着进行一下转换:

攻下数字石大账号系统

我们非常惊讶的发现,当以毫秒为单位时,转为北京时间即为我们提交忘记密码请求的服务器时刻(在误差允许的范围内可以这样认为)。

我们意识到,如果这样,我们是否可以通过修改学号和时间戳从而来伪造修改密码请求并修改任意学生数字石大的密码呢,而数字石大的数据库即为CAS系统的数据库,我们便可以通过数字石大上丰富的接口来实现各种……,想想都觉得不可思议。

动手,修改了一个学号(因为懒的原因并没有修改时间戳,但是也基本确定一小时内的时间戳不会失效),按照上面的格式登录重置密码界面。

攻下数字石大账号系统

天呢!居然没有任何阻力的进来了,我瞬间有一些怀疑人生,然后我们尝试设置一个新密码,比如万能的123456吧。

攻下数字石大账号系统

修改成功!

此时此刻真的让我们大跌眼镜,密码就这样被重置掉了。经测试,使用重置后的密码可以正常登陆数字石大。也就是说,系统认为这次重置密码请求是合法的——即从后台运用忘记密码并从邮箱中进入。

写在最后:

根据 Digitalized DCP,我们猜测学校的数字石大系统采用的是东软的软件,我们猜测可能是软件工程师在程序设计时由于考虑不周导致的。学校网络中心作为运维单位,可能不方便修改程序源代码,在东软工程师解决之前,建议学校关闭数字石大自助密码重置系统暂时采用人工审核方式以保证安全。

分享