利用SQL注入获得教育考试院查询中心管理员账户密码

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

突然想起年初时到某省教育考试院查询考试成绩无意间发现的漏洞,通过漏洞可以获取管理员账号和密码哈希,后来提交到WooYun网站了,过了很长时间没有关注这个事情,今天偶然想起,于是去看看厂商处理得怎么样,当时漏洞提交的地址在《江苏教育考试院查询中心查询中心管理员账号密码泄露漏洞》,看样子厂商早已经修复了,漏洞细节早已经公开,我在这里再叙述一遍留作备忘吧。

漏洞所在URL地址http://stat.jseea.cn/jseea_query/input.do?catlog=1&database=21%2Cdb_169,通过测试猜测到江苏省教育考试中心查询系统采取分数据库操作,各个数据库的选择通过Query String参数database来实现,其中以database=21%2Cdb_169为例,21表示查询模板(用于生成各类表单供用户填写),%2C表示编码的逗号,db_169表示数据库名称,上述解码后为21,db_169,当数据库名称不存在时构造SQL语句出现错误,程序崩溃(显示Java错误)可以看到SQL语句:

数据库名称不存在时构造SQL语句出现错误

同样的当查询模板不存在时也会触发错误:

查询模板不存在时触发错误查询模板不存在导致注入错误

由于设计上的缺陷,假如我们另行尝试指定一个特殊数据库,比如将db_169这个数据库名称改为user,然后采取特别的查询模板,输入任意值查询,就会得到管理员名称和密码哈希。

比如访问 http://stat.jseea.cn/jseea_query/input.do?catlog=1&database=1%2Cuser,考试编号输入 admin,验证码按显示的输入,点击确定,即可获取管理员名称和哈希后的密码:

管理员名和验证码获取管理员账户和密码哈希

漏洞的原因我分析一是缺少相应的逻辑判断,让注入性攻击得以实施;二是未判断数据库名或者表名是否合法,让渗透内部数据库或者表得以成功;三是未将表单查询模板ID对应绑定特定的数据库或者表,让构造任意查询表成为可能。

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!

请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*