登录框的另类思考:来自客户端的欺骗

0x01 前言

前几天刚见人发了《一个登录框引发的血案》,而常规的爆破有风控和各种变态验证码,或者大型的电商都会用SSO实现登录,密码找回逻辑看似天衣无缝,又或者采用第三方的Oauth授权。往往这些常规的东西已经被人测了千万遍。怎么才能另寻奇辟,找寻新的大陆呢?分享一次SRC挖掘过程中,遇到一堆的登录框。通过对目录的fuzz发现了一些不正常的特征。通过这些不正常特性引发的思考(胡思乱想)和正确的防护措施。

0x02特征的发现

既然是登录的客户端欺骗方式,那么先请出我们的主角登录框!

通过Fuzz后台目录,发现了一个神奇的现象,返回的状态码都为200。而且返回的Size不同说明了返回了不同的页面。

当我对/system/user/index/页面进行访问时,又被弹到了首页。但是我的状态码明明是200呀。且还是Size不同的数据!从我的第六感来说,此处肯定存在猫腻。

0x03正常的场景

按照我以往的渗透经验,出现的应该是如下场景:

  1. 首先客户端向服务端发起一次请求。
  2. 进入服务端的全局过滤器,判断是否有权限对该url资源进行访问。
  3. 如果权限不够:

1) 状态码200,返回统一的错误友好界面。 2) 状态码302,直接跳转至登录页面。 3) 状态码403,提示没有权限 4) 状态码500,抛出越权异常

  1. 权限够的话,继续执行。访问后端的业务接口。

0x04结合分析

看似好像上面聊到的200的状态码是个正常现象,但是仔细一分析有很多矛盾的地方。

1. 返回的状态码是200,但是每一次的访问跳到了登录页面。 2. 返回的状态码是200,但是每个越权的url虽然都返回到了主页。但是Response 的Size都不相同。

由此可以猜想目前的流程:

1. Client发起一次请求 2. 请求直接被Server Interface接受,返回响应内容给Client. 3. 浏览器再拿上Reponse去解析。(鉴权过程发生此处) 4. 鉴权获取Cookie中的一些Flag,有则继续无则跳转登录页面。

0x05 脆弱点

1. 从分析来看,没有正确实现全局的拦截器,而是依赖前端做权限判断。也就是说我们直接向业务接口post数据,业务接口就会拿上数据去调用其中的一些方法,只要想办法拿到接口的url和参数名即可。(获得一些增删改的垂直权限)

2. 鉴权在前端利用JS去获取Cookie的一些Flag.大家都明白,前端的一切可更改。(此时的防护,已经晚了)

0x06 拉个实际的例子。

案例一:

1)为了方便就不FUZZ了,直接F12看他的源码

2)发现前端js中使用的Ajax异步的方式访问后端接口去登陆。如果返回的json的data字段为success就跳转至Default.aspx。很明显可以猜到这就是后台的首页了。

3)尝试访问,不出意外的又回到了登录页面。但是他的response的状态码为200.且Size并不和登录页面的Size的大小一样。情况奇特抓包分析。

4)抓包分析,当请求这个页面时会返回一个html源码。发现了他跳去首页的原因。

5)还发现他的RoleID和 一些区域名都是通过JS来获取的。前端的一切都是扯淡。我们是不是可以直接篡改了呢?

案例二(截胡式):

1)直接越权访问,会返回一个html源码。经过鉴权处理后,他的处理方式只是仅仅加了location.href。来进行首页的跳转。

2)你想跳的话,就不让你跳。直接将其删除。在此我们就得到的接口的url和一些参数。

3)既然他们返回状态200,并没有出现403等阻断行为,且Size不同。说明个站的业务接口你是可以直接触碰。很显然查出了所有的信息,可做增删改的操作。

案例三:

其实每个程序员写的代码都是千变万化,在此只简单的介绍两个案例。具体的环境还要根据具体的代码去调整。在此就不做过多的展示,只要抓住了思想,其实漏洞基本就已将摆出来了。聊了这么久的攻击思路下来聊聊防御。

0x07如何做一个安全基于角色的权限控制呢

作为一个白帽子安全人员来说,当你发现漏洞后,交给客户安全建议是必不可少。怎样做一个非天马行空而是一个可落地的解决方案呢?

1)因为对java稍微熟悉那么一点点 ,就用java做一个简单的小例子。

项目结构

2)权限配置文件

路径中含有 admin 的需要管理员权限才可以访问

路径中含有 user 的需要 用户或者管理员 权限

路径中含有login的需要游客权限即可访问

3)过滤器设计

依赖servlet的Filter实现,所以需要先导入Servlet-api.jar

4) 将过滤器加入web.xml配置文件

5 )测试用的Controller

6)测试

1-直接访问登录用户才有的编辑权限的地址 user/add

2-访问login 以user的身份登录后,分别访问 user/add 和 admin/index

登录成功

访问用户

访问超管权限

0x08 总结

最后基于角色的权限控制的设计,鉴权放在全局拦截器中。也就是在你发其请求后,还有没路由到接口之前。对你的权限进行了判断。所以只要权限不够,甚至都无法fuzz真实的网站路径,更别说越权触碰业务接口了。这次的分享仅仅是我挖SRC过程中的胡思乱想,如果有任何错误,还希望大佬们多多指教。

*本文原创作者:TopScrew,本文属FreeBuf原创奖励计划,未经许可禁止转载

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2018-07-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杂烩

SSM项目搭建之MyBatis 原

    MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了goog...

742
来自专栏美团技术团队

Java NIO浅析

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到...

4059
来自专栏Linyb极客之路

使用lazyInit缩短Spring Boot启动时间

Spring Boot可以进行有助于相关针对项目的设置,包括最常见的默认设置和随时可用的配置,这无疑是很棒的,因为它节省了宝贵的时间 然而,对于框架的新手来说,...

7547
来自专栏冷冷

Consul微服务的配置中心体验篇

Spring Cloud Consul 项目是针对Consul的服务治理实现。Consul是一个分布式高可用的系统,具有分布式、高可用、高扩展性 Consul ...

6566
来自专栏IT米粉

IntelliJ IDEA插件——冷门神器分享

IntelliJ IDEA就不必介绍了,至今还能保持IDE前三的神器,如今java程序员的首选,今天介绍几款冷门但绝对是神器的IDEA插件。 前言 IDEA自不...

5046
来自专栏我是攻城师

关于Java的BIO,NIO和AIO的演进

Java里面的IO模型种类较多,主要包括BIO,NIO和AIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就...

1061
来自专栏LanceToBigData

JavaWeb(六)之MVC与三层架构设计

前言   这段时间要学习hadoop,但是也希望把自己的web知识复习起来。所以花自己休息的时间把这些web的知识好好的巩固一下!没有什么可以阻挡我前进的脚步。...

3748
来自专栏小狼的世界

使用PHP脚本来写Daemon程序

这又是一个有趣的概念,daemon在英语中是"精灵"的意思,就像我们经常在迪斯尼动画里见到的那些,有些会飞,有些不会,经常围着动画片的主人公转来转去,啰里啰唆地...

1412
来自专栏美团技术团队

Android Binder漏洞挖掘技术与案例分享

本文由作者根据其在KCon 2016黑客大会上的演讲内容整理而成。演讲稿链接:Binder fuzzing based on drozer。 文章开始,先来看几...

4607
来自专栏魂祭心

原 REST - Representati

3587

扫码关注云+社区

领取腾讯云代金券