记一次某App未授权访问

漏洞介绍

未授权访问漏洞,顾名思义,是在攻击者没有获取到登录权限或未授权的情况下,或者不需要输入密码,即可通过直接输入网站控制台主页面地址,或者不允许查看的链接便可进行访问,同时进行操作。

漏洞产生原理

未授权访问是系统对用户限制不全,或者无限制,可以让任意用户或者限制访问用户,可以访问到内部敏感信息,导致的信息泄露,以及系统功能的执行。越权漏洞的产生原因是未对访问功能做权限的效对,或者限制不全,导致对用户的限制只局限于某一个功能和操作上。
而本文中所涉及的漏洞:服务端没有进行用户身份的校验,没有对userid值的请求进行加密和认证操作,穷举userid值导致大量高校个人用户信息进行泄露

漏洞危害

泄露用户信息系统信息。某些服务和系统中,未授权访问还可以执行系统命令,操作系统文件,导致系统的整体安全遭到破坏。

漏洞复现

使用安卓模拟器进入某app,完成登录后,看到我的->编辑资料,点击->编辑资料,使用burpsuite进行抓包
:不会使用安卓模拟器抓包请参考曾哥文献->:使用Proxifier玩转代理

此时抓到 一个数据包,此时进行重放发现得到个人信息,发现userid可穷举

然后我们将数据包发送到burpsuite的轰炸模块,将–>userid作为穷举的参数,从当前值遍历到89999,发现泄露很多个人信息(身份证,学校,电话)高达几万条,可怕…

附上信息泄露截图

漏洞修复建议

  1. 加入用户身份认证机制或token验证,对系统的功能点增加权限控制。
  2. 采用Java过滤器技术,对/pages下所有的URL进行登录状态检查,通过session.getAttribute()方法从session中获取登录成功时存入的session中的身份标识,判断客户端传递过来的身份标识是否与session中保存的一致,不一致则跳转到登录页面,关键代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $ //从session里取的用户名信息
    String username = (String) session.getAttribute("userID");
    //getAttribute中变量根据实际变量传入。
    //判断如果没有取到用户信息,就跳转到登陆页面
    if ((username == null) || "".equals(username)) {
    //跳转到登陆页面
    res.sendRedirect("http://" + req.getHeader("Host") +"/login_oa.jsp");}
    else {
    //已经登陆,继续此次请求
    chain.doFilter(req, res); }}