0x01 等保测评项
0x02 测试内容
0x03 漏洞原理
原理
分类
0x04 代码示例
// @Tags SysUser
// @Summary 设置用户信息
// @Security ApiKeyAuth
// @accept application/json
// @Produce application/json
// @Param data body system.SysUser true "ID, 用户名, 昵称, 头像链接"
// @Success 200 {string} string "{"success":true,"data":{},"msg":"设置成功"}"
// @Router /user/setUserInfo [put]
func (b *BaseApi) SetUserInfo(c *gin.Context) {
var user system.SysUser
_ = c.ShouldBindJSON(&user)
if err := utils.Verify(user, utils.IdVerify); err != nil {
response.FailWithMessage(err.Error(), c)
return
}
if err, ReqUser := userService.SetUserInfo(user); err != nil {
global.GVA_LOG.Error("设置失败!", zap.Error(err))
response.FailWithMessage("设置失败", c)
} else {
response.OkWithDetailed(gin.H{"userInfo": ReqUser}, "设置成功", c)
}
}
0x05 测试过程
-
密码重置中如果有不需要输入原密码就能修改密码时,在修改密码处抓包,修改数据包中的用户名或用户ID等,测试是否能修改其他用户的密码;
-
修改用户资料时修改用户ID,测试是否能修改其他用户资料;
-
查看订单时,遍历订单ID ,测试能否查看其他用户订单;
-
攻击者越过中间校验步骤直接进行后续操作,导致中间校验等步骤失效,对于这样的流程越过漏洞通常的测试思路是,首先完成正常的业务逻辑步骤,获取每一个步骤的请求,再绕过中间步骤直接访问最后一个或几个的验证请求,测试是否能成功访问。流程越过在密码修改、密码重置、购买商品处出现的可能性较大,这些测试点可着重留意。
-
当对一个有注册功能或是存在身份认证的站点,可以申请两个同级的账户进行水平越权测试。不过最好是让客户提供一个管理员用户、两个同级账户,完成水平越权、垂直越权测试。就可以替换账号的token进行测试。分析每个参数的功能,尽可能的多去尝试修改,比如,任意加减参数值或将false修改为true、success,看看会有什么变化,执行某一操作的时候删除cookie、token后有什么变化。
测试案例1
-
test登录成功后的请求包中card_id与响应包中card_id、页面中“会员号:20128880322”一致,响应包返回test用户的用户名以及md5加密后的密码。猜测card_id为身份控制参数,尝试是否可以通过修改card_id获取其他用户的用户名、密码。
-
回到登录页面,页面底部有其他用户账号头像,响应包中列出这些头像的文件名,按照顺序马春生的应该是第一个20128880316,这个编号与test用户card_id相似,猜测是否就是马春生的card_id。
-
将test登录成功的请求包中的card_id值更改为20128880316,得到用户名m233241和md5加密的密码,将密码解密后成功登录马春生账号。
测试案例2
-
登录lili账号可以查看到lili的个人信息,URL中出现username参数username=lili,猜测可能是通过此参数控制身份信息。
-
直接修改URL中username的值,改为lucy,成功查看到lucy个人信息,这是一个水平越权漏洞。
测试案例3
-
使用管理员登录,管理员有创建用户的权限,添加用户,抓取添加用户的数据包
-
发送至Repeater模块,Go一下,顺利创建新用户。
-
退出admin用户,再次提交添加用户POST请求。再次登录admin用户,发现并没有新用户被创建。
-
登录用户pikachu,只有查看权限。
-
复制pikachu用户的Cookie,与之前admin用户登录时添加用户的POST请求中的cookie进行替换,更改username的值,再次发送数据包,试试能否创建用户。再刷新网页,能看到test123123已经添加成功。说明后台没有对当前登录账号的操作进行正确的权限认证,存在垂直越权漏洞。
0x06 检测工具
-
Authz插件:
下载地址:https://github.com/portswigger/authz
使用方法:https://gh0st.cn/archives/2019-06-27/1?hmsr=toutiao.io&utm_campaign=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
-
secscan-authcheck
下载地址:https://github.com/ztosec/secscan-authcheck
0x07 风险分析
0x08 加固建议
-
订单号此类参数,以随机方式生成,再进行算法加密,或者请求的数据包额外附带一个参数,比如token,从而防止重放和遍历订单号这类攻击; -
前后端同时对用户输入信息进行校验,双重验证机制; -
做过滤器,对权限进行全局校验(每次调用某个接口时,可先对权限进行校验)第一步清洗URL地址,并提取API接口名称,第二步从session中提取当前登录用户的userid,第三步,提取当前用户的角色ID,第四步,判断当前用户对应的角色是否有权限访问当前API接口(检查垂直越权),最后判断当前登录用户是否对目标对象有操作权限(检查水平越权)。
参考
http://www.360doc.com/content/22/0309/08/77981587_1020713343.shtml
https://www.csdn.net/tags/MtTaEgysNDk1MTg1LWJsb2cO0O0O.html
https://mp.weixin.qq.com/s/vwF7aTvk-U-SnJqO3f80gA
原文始发于微信公众号(Tide安全团队):越权访问测试
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论