某大学缴费平台一处水平越权和任意密码重置
简介
- 水平越权访问是一种“基于数据的访问控制”设计缺陷引起的漏洞。由于服务器端在接收到请求数据进行操作时没有判断数据的所属人/所属部门而导致的越权数据访问漏洞。Web应用程序在接收到用户的请求时,我们在增删改查某条数据时候,没有判断数据所对应的用户,或者在判断数据的用户时是通过从用户表单参数中获取userid来实现的,这里的话我们可以修改userid来实现水平越权。
- 任意密码重置是可通过篡改用户名或ID、暴力破解验证码等方式修改/重置任意账户的密码。
测试过程
一、水平越权
1、目标站点
http://xxx.xxx.edu.cn/payment/
发现这是一套CMS模板,可以对全国高校的缴费平台通用,也就是说可以在使用该套CMS的高校网站里找出同样的漏洞。
2、随便注册两个账号
ceshi222、ceshi333
3、登录ceshi333账号
4、点击提交,burp抓包,发现姓名、年龄、身份证号码、出生年日被base64编码了,不过没关系,我们把要替换的内容也改成base64编码就行
替换前
替换后
放行数据包
5、重新登录ceshi333账号,发现姓名和身份证变成了ceshi222的信息
二、任意密码重置
1、通过水平越权修改ceshi222账号为ceshi333
替换前
替换后
放行数据包,修改成功
2、重置ceshi333的密码,但是身份证号码是ceshi222的
3、登录ceshi333用户,发现信息已经是ceshi222信息
三、修复方案
水平越权
1、水平权限参数不要用自增值,用id加密、随机数或GUID,但搜索引擎或攻击者可以同样用这个随机数和连接去进行操作。
2、web层检查发起请求的用户权限,比如从session信息中获取。
3、数据库表增加ownerId字段,增删改查询时加上其作为where语句条件(即每一个信息增加一个发布人的字段,修改的人必须与发布的人为同一个人才可以访问)。
4、对返回信息进行强加密,屏蔽一些比必要返回的信息(针对本网站)。
任意密码重置
1、把用户名和身份证信息进行绑定验证(针对本网站)。
最后来听首歌放松一下