用户体系

现在的互联网公司几乎都有自己的用户体系,而这套用户体系当中可能存在很多问题。

在此用乌云主站上已经报过的相关漏洞总结一下,这个体系当中出现的林林总总的问题:

1、越权操作


上面说过了只要对数据库进行增、删、改、查询的情况都可能存在越权。我们来看一般我们在web应用开发时操作数据库常会出现的一般语句:

增加:

insert into tablename values(一些字段) where userid/username=12345/用户名 

参考例子:爱拍越权漏洞及设计不合理漏洞大礼包(妹子哭了)

删除:

delete from tablename where id=123 

参考例子:百度创意专家某功能平行权限漏洞(可删除他人素材)

更改:

update 一些字段 tablename set 一些字段 where userid/username=12345/用户名 

参考例子:搜狐白社会任意用户信息修改漏洞

查询:

select * from tablename where id=12345 

参考例子:Like团用户信息泄露+越权漏洞(可获取大量用户住址联系信息)

大家可以看到,以上语句都涉及where,而后面的userid或username即是越权的突破口。在操作数据库时功能请求中往往会带着一些参数来用于辨别信息的唯一值。而这些参数就是我们越权时需要注意的。

在web开发中判断用户身份的字段往往是不会在客户端传递的。用户登录系统后,开发人员一般会创建一个session来保存用户名。当用户在查看、修改个人信息等需要判定用户身份时,就直接从session中获取,而不会在客户端传递,也就避免了篡改。但若出现从客户端传递的话,那么就必须要有一步权限验证的要求了。所以在测试越权时要用抓包工具截获请求,细览下可能存在辨别信息的唯一值,来进行测试。这里要说一点,传输的参数并不一定在请求参数中,也有可能存在链接等位置。如:

虾米网送娃娃漏洞(平行权限漏洞)

2、cookie验证问题


一些网站对于用户是否成功登录不是看用户名与密码是否与数据库里面的匹配,而是看cookies是否为空或session是否为true。这样的问题的假设就是开发者认为用户能够登录,那么cookies就不会为空或session就不会为false。但是逻辑缺陷很明显,那么只要能知道用户ID,然后构造一个cookies或让session值为true就可以绕过这样的认证了。

参考例子:WooYun: 益云广告平台任意帐号登录

3、密码重置流程


密码找回逻辑测试一般流程

首先尝试正常密码找回流程,选择不同找回方式,记录所有数据包
分析数据包,找到敏感部分
分析后台找回机制所采用的验证手段
修改数据包验证推测

3.1 用户凭证暴力破解

3.2 返回凭证

3.3 密码找回凭证在页面中

通过密保问题找回密码 例子

sohu邮箱任意用户密码重置

3.4 返回短信验证码

3.5 邮箱弱token

3.6 用户名 & 服务器时间

3.7 用户凭证有效性

3.8 邮箱token

3.9 重置密码token

3.10 重新绑定

3.11 邮箱绑定

3.12 服务器验证

3.13 服务器验证可控内容

3.14 服务器验证验证逻辑为空

3.15 用户身份验证

账号与手机号码的绑定

上海电信通行证任意密码重置

3.16 账号与邮箱账号的绑定

3.17 找回步骤

3.18 本地验证

在本地验证服务器的返回信息,确定是否执行重置密码,但是其返回信息是可控的内容,或者可以得到的内容 例子

看我如何重置乐峰网供应商管理系统任意用户密码(管理员已被重置)

oppo重置任意用户密码漏洞(4)

3.19 发送短信等验证信息的动作在本地进行,可以通过修改返回包进行控制

3.20 注入

3.21 Token生成

3.22 注册覆盖

3.23 session覆盖