一、前序
验证码是在登录、查询敏感数据、执行敏感操作等地方加入的一类验证验证机制,其原理就是服务器生成一段字符串(字母、数字、汉字、图片等),发送给客户端(一般以图片的形式)。客户端由操作者识别后输入,作为请求的一部分发送给服务器,服务器来验证自己保存的和用法发送的是否一致。
其实这篇挖掘验证码漏洞的文章已经写了许久了,一直没有发出来,也是有原因的(主要还是授权测试后,需客户那边修复完毕后)。这个漏洞是在做项目的时候挖掘的,里面也掺杂了一些运气成分。大致的挖掘的思路:查询接口验证码可重复使用,再加上查询后台未对用户查询的次数做限制导致手机号码可遍历、查询后台未对当前用户的cookie做校验导致可越权查询其他用户的信息(这个归结到未授权)、后台未对用户附件下载做限制以及附件的请求参数有规律可循导致任意文件下载。
某个周末的下午,自己独自在家也没有什么事情可做,因为之前都没好好挖掘项目中的站点的漏洞,所以打开电脑测试一下授权测试的站点。但是一打开就犯困(主要是这个站点实在是太难挖了,懂得都懂是什么站点。),现在站点不像之前有什么注入、xss、SSRF、未授权漏洞等。都几乎没有这样的漏洞了,但是逻辑漏洞(其实在业务交互的地方这样的漏洞还是挺多的)可以测一测,因为网站上面许多查询的业务api。一旦心中有了目标,那就开始搞吧。(打码地方较多)
二、挖掘思路
手工开始找有查询业务的地方,如图所示,这是一个用户进行申请查询的接口,只要编号和手机号码一一对应即可查询到信息。在看到这个界面首先我脑子里面会出现有个渗透测试的方向:
1、验证码是否可以被绕过?。
4、是否存在用户上传附件任意下载漏洞。(这个主要是在测试前发现,用户提交申请时需要进行上传附件的。)
漏洞挖掘
1、验证码可重复使用
第一次查询页面返回的信息
第二次查询页面返回的信息
2、手机号码可遍历
下载附件的请求参数后面是固定的,只要随机构造前面的数字组合,即可任意下载用户附件。
4、未授权访问
三、总结
至此测试工作也结束了,有这几个漏洞也算是在客户那边提升了一下技术的可信度(虽然没有拿到服务器)。收拾收拾,写个报告,剩下的就交给开发去整改吧。这次测试从业务查询的某个接口发现验证码可重复使用延伸到手机号码可遍历、任意文件下载、未授权漏洞。可见一个小小的验证码漏洞可以延伸出如此多严重的问题。还是那句话,程序都是人编写的,只要是人进行编写的,都是有漏洞可挖的。
四、修复建议
1、设置验证码自动刷新功能;
2、设置附件下载的权限;
3、添加token验证;