###5.4 访问控制漏洞
概述
访问控制漏洞简单的来说就是应用首先会判断用户是否具有身份凭证(Cookie、JWT),随后确认用户执行“所请求的操作”是否具有该操作的权限,主要漏洞分为横向、纵向越权漏洞。
实现方式
- 使用成型框架,如Shiro、Spring-Security等。
- 使用过滤器、拦截器自定义访问控制。
下图为本章节的整体叙述架构

横向越权
将资源的访问限制为特定的用户,例如银行应用程序将允许用户从自己的帐户查看交易和付款,但不允许查看其他用户的帐户。下面列举此漏洞的几个特征。
- 越权漏洞属于逻辑漏洞。利用业务逻辑在程序中体现时,仅仅限制
于用户点击。 - Web应用程序接收到用户请求,修改某条数据时,没有判断数据的
所属人,或者在判断数据所属人时从用户提交的表单参数中获取了
用户信息,导致攻击者可以自行设置用户,修改不属于自己的数据
只要是权限验证不是使用cookie来验证,都有可能发生横向权限漏
洞 - Web应用程序接收到用户请求,修改某条数据时,没有判断数据的
所属人,或者在判断数据所属人时从用户提交的表单参数中获取了
userid。导致攻击者可以自行修改userid修改不属于自己的数据。
所有的更新语句操作,都可能产生这个漏洞。
实例
int userid=Integer.valueOf(request.getParameter("userid");
从用户输入的参数里确认用户ID
String email=request.getParameter("email);
String tel=request.getParameter( tel");
String realname=request.getParameter('realname");
String pass=request.getParameter(“pass");
JdbcConnection conn = null;
try {
conn = new JdbcConnection():
Object[]params = new Object[5];
params[0]= email;
params[1] = tel;
params[2] = realname;
params[3]= pass;
params[4] = userid;
final String sql= "update user set email=?,tel=?,realname=?,pass=? where userid=?";
conn.execUpdate(sql,params);
conn.closeConn();
一
分析
查看任何传递用户信息的参数
- 只要是用户id,用户名等是以参数方式传递,就有可能有风险
查看特权内容,是否进行了权限管理 - 每个人博客等,即使是私有的:
- 显示我可看列表进行了权限设置
- 查看详情时,根据内容ID来进行判断
修复
int userid = IntegervalueOf(GetUseridFromCookie(request));--从cookie中确认用户1D
此类漏洞,很多时候是业务分析到程序设计时产生的。因此很多时
候需要更改程序逻辑。
>用户id,用户名等禁止通过参数来传递,直接取Cookie里的值
>私有信息访问时需要验证用户身份
隐藏的博客等,需要验证用户身份,而不只是通过内容ID来取信息
>在数据库取数据时,需要验证
>原来语句:select * from blogs where blog id = xx:
>休整后:select * from blogs where blog id = xx and owner = yy;
>要是短时间很难更改整体逻辑,可以通过混淆参数方法来进行防御
>用户ID等使用MD5码等,很难进行遍历
垂直越权
不同权限的用户可以访问不同的应用程序功能,例如管理员和普通用户。下面列举此漏洞的几个特征。
- 垂直权限攻击又叫做权限提升攻击。其原理是由于Web应用没有做
权限控制,或仅仅在菜单上做了权限控制,导致恶意用户只要猜测
其他管理页面的URL,就可以访问或控制其他角色拥有的数据或页
面,达到权限提升的目的。 - 后台管理页面一般只允许管理员访问,如果普通用户可以访问,就
存在向上越权漏洞。 - 解决向上越权是比较容易处理的事情,如果管理员表与普通用户表
是同一张数据库表,就必须要存在权限验证字段,权限验证字段用
来区分是否为管理员。
实例
1、直接访问管理员页面
- 权限控制在前台做。
- 检查用户是不是admin,不是就进行跳转到登陆页面
- 使用抓包工具,不接收跳转语句,就可以一直访问管理员页面
2、
<tr>
<td><a href="/userjsp">管理个人信息</a></td>
</tr>
<%if (power.indexof("administrators")>-1){%>
<tr>
<td><a href="/userlist.jsp">管理所有用户</a></td>
</tr>
<%}%>
影响
垂直权限漏洞,一般是直接访问业务管理员权限
可能会看到全部用户信息
可能更改全部通告信息(注入广告信息)
可能更改商品价格
可能更改订单信息
只要是能拿到业务管理员权限,可能会对业务造成很大影响
价格改动引起的低价卖商品而赔钱一金钱影响
虚假通知引起的多人被骗一信誉影响
更改订单引起的订单丢失-信誉/ 金钱双重影响
用户信息泄漏一隐私泄露 /影响信誉
修复方法
- 在每个页面的加载之前进行权限验证
- 进行服务器验证一不能在前台验证
- 验证时,从session获取对应的用户信息,session中用户信息存放在服务端,用户不能修改
- 对每个敏感页面(管理员页面)都进行验证
作者:天下兵马大都督 创建时间:2022-05-19 09:36
更新时间:2023-04-12 16:17
更新时间:2023-04-12 16:17