在测试的过程中我们的测试者一定要多加观察、总结和思考,下面分享我在19年中旬发现的一次重大Bug测试过程记录
1.背景:
当前系统做安全性测试,在测试过程种,有这样一个接口,该接口的作用是,前端传递sql语句到消息主体中,后端server根据这个sql语句做查询操作,再将查询结果返回到前端,最后前端根据返回的结果做相应的逻辑处理,整个流程看上去没有太大的问题,然后仔细品味会发现很大的安全问题,下面来进入探索性测试
2.探索过程:
该接口地址:http://ip:port/CMApi/api/database/getjsonbysql?usertoken=6739209e7e35ce26265c87b9984d33db
消息主体:
"show create smm_userlogininfo"
根据接口,我们可以得知传递sql语句返回一个类似于字典或者json格式的字符串给前端,
前端传递的sql语句一般是属于业务逻辑类型的,因此消息主体传递的一般是比较固定类型的查询语句,但如果有用户登录到系统中,获取此类接口信息,通过接口工具将消息主体自定义为增删查改类型的sql语句,那么就可能对数据库造成不可修复性的损害,下面我们进入具体的测试过程
3.测试过程
3.1.在测试环境数据库中新建test数据库,将消息主体修改为”drop database test;”,然后发送请求,检查响应结果和数据库中检查是否执行删除test库成功,根据消息提示和数据库检查,竟然发现能执行成功,是不是觉得不可思议,在实际的接口开发过程中竟能将这样的信息直接暴露给用户,是何等的危险
3.2.下面再进行新建、删除、清空、及查询类的消息主体更改,竟然也都能通过,还能将所有表格信息通过这个接口直接暴漏出来
4.解决方法:
最后将这个问题反馈给我们的开发者后,将这样的接口做了修改和隐藏,下面的开发备注的修改方式
原因:查询数据库语句在前端代码内
修改:CMAPI提供新接口查询(将代码中含有数据库脚本的移至后台)
影响范围:点击导出到站点能否查询到站点信息
5.测试总结:
测试工作中我们都熟知理论,但实际工作中可能非常明显而严重的问题却不能发现,所以在熟知理论的前提下我们一定要勇于探索,勇于试错,但需要以自己能控制为前提,希望读者喜欢,后续继续分享工作中遇到的严重问题集锦,谢谢大家。