绕过原理
MobileAuthenticationFilter拦截器会拦截手机登录和第三方登录,拦截url为/mobile/token/*
,并根据传入的mobile字段来区分手机登录或授权登录。
验证码拦截器会拦截auth/mobile/token/sms
手机登录的请求。
绕过方式
请求auth/mobile/token/aaa 并且mobile字段为SMS@{账户的手机号码},code字段不写.就相当于绕过了验证码拦截器了。
具体看 https://gitee.com/log4j/pig/issues/I1JR3Q。
案例
1、POST请求登陆目标系统。
http://ip:port/#/login
2、绕过获取Token
请求类型:POST
请求接口:/auth/mobile/token/aaaa
请求参数:mobile=SMS@要登陆的用户名&grant_type=mobile。
例如:
mobile=SMS@manager时登录manager用户 mobile=SMS@admin登录admin用户。
manager
admin
这里是怎么知道mobile参数的格式呢?
在信息收集的时候多关注前端js页面,在js文件中会定义一些post、get、ajax请
求,比如该站点的js中定义mobile字段的格式为mobile=SMS@用户名。
3、前端限制绕过
通过修改返回包的状态码,获取返回的json格式数据。
正常登陆错误的返回包
返回包状态码为200的返回包
4、使用步骤1获取对应的用户的token替换返回包的token
5、放行响应包
成功进入后台
原文始发于微信公众号(不懂安全的果冻):Bug Bounty Tip | 一次登陆绕过