利用SQL注入获得教育考试院查询中心管理员账户密码
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
突然想起年初时到某省教育考试院查询考试成绩无意间发现的漏洞,通过漏洞可以获取管理员账号和密码哈希,后来提交到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语句:
同样的当查询模板不存在时也会触发错误:
由于设计上的缺陷,假如我们另行尝试指定一个特殊数据库,比如将db_169这个数据库名称改为user,然后采取特别的查询模板,输入任意值查询,就会得到管理员名称和密码哈希。
比如访问
http://stat.jseea.cn/jseea_query/input.do?catlog=1&database=1%2Cuser
,考试编号输入 admin,验证码按显示的输入,点击确定,即可获取管理员名称和哈希后的密码:
漏洞的原因我分析一是缺少相应的逻辑判断,让注入性攻击得以实施;二是未判断数据库名或者表名是否合法,让渗透内部数据库或者表得以成功;三是未将表单查询模板ID对应绑定特定的数据库或者表,让构造任意查询表成为可能。
小心跨省
老大,漏洞早已修补了~要不我也不敢乱发啊~