38

一次有趣的挖掘验证码漏洞经历

 3 years ago
source link: https://www.freebuf.com/vuls/253833.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、前序

验证码是在登录、查询敏感数据、执行敏感操作等地方加入的一类验证验证机制,其原理就是服务器生成一段字符串(字母、数字、汉字、图片等),发送给客户端(一般以图片的形式)。客户端由操作者识别后输入,作为请求的一部分发送给服务器,服务器来验证自己保存的和用法发送的是否一致。

其实这篇挖掘验证码漏洞的文章已经写了许久了,一直没有发出来,也是有原因的(主要还是授权测试后,需客户那边修复完毕后)。这个漏洞是在做项目的时候挖掘的,里面也掺杂了一些运气成分。大致的挖掘的思路:查询接口验证码可重复使用,再加上查询后台未对用户查询的次数做限制导致手机号码可遍历、查询后台未对当前用户的cookie做校验导致可越权查询其他用户的信息(这个归结到未授权)、后台未对用户附件下载做限制以及附件的请求参数有规律可循导致任意文件下载。

iymqmq6.jpg!mobile

某个周末的下午,自己独自在家也没有什么事情可做,因为之前都没好好挖掘项目中的站点的漏洞,所以打开电脑测试一下授权测试的站点。但是一打开就犯困(主要是这个站点实在是太难挖了,懂得都懂是什么站点。),现在站点不像之前有什么注入、xss、SSRF、未授权漏洞等。都几乎没有这样的漏洞了,但是逻辑漏洞(其实在业务交互的地方这样的漏洞还是挺多的)可以测一测,因为网站上面许多查询的业务api。一旦心中有了目标,那就开始搞吧。(打码地方较多)

二、挖掘思路

手工开始找有查询业务的地方,如图所示,这是一个用户进行申请查询的接口,只要编号和手机号码一一对应即可查询到信息。在看到这个界面首先我脑子里面会出现有个渗透测试的方向:

1、验证码是否可以被绕过?。

2、手机号码是否可遍历?(这个依赖于验证码可绕过;自己也可以进行编写脚本来进行每次请求查询进行模拟抓取验证码)。

3、是否存在未授权,比如A查询B用户信息,只需修改编号即可。

4、是否存在用户上传附件任意下载漏洞。(这个主要是在测试前发现,用户提交申请时需要进行上传附件的。)

3a63Yzf.jpg!mobile

漏洞挖掘

1、验证码可重复使用

首先验证了一下验证码的问题,发现验证码存在可重复使用的漏洞,基于这一点通过编写脚本,构造手机号码,然后与编号(这个可以进行爬虫爬取编号或者直接在页面选取几个编号,但是看了一下源码,貌似申请编号被隐藏在了js代码里面,后期通过爬虫发现,网站启用了防爬虫的机制)进行相匹配,来进行爆破手机号码。

FzYbUfe.jpg!mobile

第一次查询页面返回的信息

FzYbUfe.jpg!mobile

第二次查询页面返回的信息

2、手机号码可遍历

庆幸的第一个、二个漏洞已被挖掘出来(验证码可绕过、手机号码可遍历)。并对其中一个用户进行查询,果然会查询到用户的敏感信息。本来到这里我都要收拾一下,写报告然后提交客户那边。但是心想,既然这里的查询接口有问题,附件下载或者别的地方是不是也有同样问题(之后发现附件下载处确实存在问题)

rmIB7rz.jpg!mobile

myUVRfB.jpg!mobile 3、任意文件下载

按照前面的测试思维,本地又进行了测试用户上传附件的地方(这里不是文件上传漏洞,只是用户上传附件的链接可以直接下载)。点击附件,哇喔,可以直接下载附件,这......一点权限校验也没有(主要是站点的业务量比较大),至少有个验证当前用户权限吧(可以发送验证码进行验证)。然后我又用Bup进行多次抓取下载的数据的请求包。发现一个更可怕的漏洞,附件的前缀有规律可循(至少附件命名设置一个随机数进行命名吧)、请求方法竟然是GET,这是。。。。。。一脸懵逼的我喝了点水,冷静了一下。

myUVRfB.jpg!mobile

6ZjQBzE.jpg!mobile

下载附件的请求参数后面是固定的,只要随机构造前面的数字组合,即可任意下载用户附件。

zAn6Jb3.jpg!mobile

4、未授权访问

透着窗户看着外面的天已经黑了,但是此时的我还是继续挖掘其他的漏洞,今天就和逻辑漏洞杠上了。人顺的时候是真顺,在审查元素的时候,又发现一枚未授权的漏洞,请求参数后面添加编号,即可获取到用户信息,只不过是展现在页面。但是通过编写脚本即可提取信息。申请编号是可以进行构造的,都是有规律可循的

MFr2Unj.jpg!mobile

MFr2Unj.jpg!mobile

AVBvQ3i.jpg!mobile

三、总结

至此测试工作也结束了,有这几个漏洞也算是在客户那边提升了一下技术的可信度(虽然没有拿到服务器)。收拾收拾,写个报告,剩下的就交给开发去整改吧。这次测试从业务查询的某个接口发现验证码可重复使用延伸到手机号码可遍历、任意文件下载、未授权漏洞。可见一个小小的验证码漏洞可以延伸出如此多严重的问题。还是那句话,程序都是人编写的,只要是人进行编写的,都是有漏洞可挖的。

四、修复建议

1、设置验证码自动刷新功能;
2、设置附件下载的权限;
3、添加token验证;

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK