记一次联通校园网web认证页面逻辑漏洞挖掘过程

记一次联通校园网web认证页面逻辑漏洞挖掘过程

首先,这个漏洞是我在无意间挖到的,漏洞本身的危害并不高。但由于最近我们学院在各大班群发了一份“学生-导师分配表”的Excel表,里面有所有人的出生日期。瞬间使得该漏洞的可利用性提升了不少,所以就有了这篇关于该逻辑漏洞挖掘过程分析的文章。由于该漏洞属于逻辑漏洞,所以先介绍一下

什么是逻辑漏洞?

逻辑漏洞是指由于程序逻辑不严或逻辑太复杂,导致一些逻辑分支不能够正常处理或处理错误一般出现在一下几个方面:

  • 任意密码修改(没有旧密码验证)
  • 越权访问
  • 密码找回
  • 交易支付金额
  • ……

登陆时,是否可以绕过验证码形成撞库。登录处主要存在的点

  • 返回包中有验证码
  • 返回页面 hidden中有验证码
  • 有些其他登陆url中不需要验证码
  • 验证码不变,验证码没有一个完整的服务请求,只在刷新url时才变
  • 第一次请求包验证了验证码是否正确,第二次请求不需要验证
  • 拦截登录时验证码的刷新请求,第一次验证码未失效,可绕过
  • 验证码和用户名、密码是否一次同时提交
  • 公众号,app无验证                                                                                          来源   —  百度

这个是我们学校联通的web认证页面,联通给我们每个人分配的都是公网ip,我是真心觉得可遇而不可求,对我这种喜欢搞事情的人来说,实在是太方便了,甚至在寝室搭起了服务器。但这不是重点,直接讲这个逻辑漏洞的挖掘过程吧。

挖到这个洞,一开始是因为前几天我的联通账号突然无法登录了。我不清楚到底是被别人改了密码还是出了什么bug,认证时一直提示我密码错误,而且我试了我所有改过的密码都还是不行。二营长给我说让我去联通营业厅把密码改回来,但那天又恰好是周六的晚上。营业厅已经下班了而且明天去的话又要耽误很长时间。所以我便想自己把密码给改回来,那么直接开干。

一开始我也是想,对这个登录框做一次爆破。因为上网账号就是我们的学号,通常密码是身份证后六位,即使改了密码,大部分人还是习惯改为6位纯数字。但是发现这个登录点其实还是限制得比较严格的,如果密码多错几次,这个账号就会被强制等5分钟才能登录一次,如果还错那么再等5分钟。所以想从这里下手几乎是不可能的。于是我就换了个思路,借了一个别人能用的账号。

 

正常登录后,在web页面有一个修改密码的功能,但发现用户账号是被锁定的。但观察网页源码却发现。。

心里顿时有了点逼数,习惯性地打开了burp开始抓包。果不其然

通过抓包发现账号其实对用户来说是一个可控的字段,又没有token,此处的账号便可以替换为别人账号。

而这个逻辑漏洞也在这里,修改账号密码,是要求输入一次原密码和两次新密码的。但是如果密码错误,会修改失败。而我反复输错原密码会怎样呢,在反复试验后发现,只要是原密码错误,在返回的数据包中都会得到fail的字段,成功则是success。

看来联通的程序猿写代码时只考虑登录时密码错误的次数限制,却忽略了在修改密码处对原密码错误的次数限制。既然没有做限制,便可以对原密码进行爆破。

当时我便替换为了自己的账号用6位数的字典,扔到了burp的Intruder中去爆破了。这里我就用一个别人的账号演示。

设置好payload后,可以把线程调大一些。attacking……

此时不但爆破出来了别人的原密码,而且还成功重置了他的密码为1。本来返回状态码也应该是302的,length为199.可能在写这篇文章复现的时候,联通的认证服务器出了点bug,虽然报了500的错误,但是密码还是重置成功了的。

现在我们再用重置后的密码,去登录他的联通账号。

登录成功!

关于这个漏洞是如何被巧妙地利用的,我会在这篇文章的下半部分提到。

 

 

zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。