授权测试专题之——权限提升测试
权限提升是从一个特权等级升级到另一个特权等级的问题。在此阶段,测试需要确认用户不可能在应用程序内部使用特权提升攻击以修改自己的特权/角色。
一般权限提升分为垂直提升和横向提升。
垂直提升指某个用户从低权限通过利用某种应用漏洞或手段,提升为拥有高级别的访问权限,如从普通角色升级为管理员角色。
横向提升指某个角色用户可以访问其它类似角色用户的资源信息,如角色1对应的用户1可以访问角色1对应用户2的相关信息。
而对应于实际系统中,就是通常所说的纵向越权操作与横向越权操作,前者指的是一个低级别攻击者尝试访问高级别用户的资源。而后者指的是攻击者尝试访问与他拥有相同权限的用户的资源,如下图示:
对于权限提升测试,通常建议从以下几个方面进行:
¨ 页面是否进行权限判断;
¨ 页面提交的资源标志是否与已登录的用户身份进行匹配比对;
¨ 用户登录后,服务器端不应再以客户端提交的用户身份信息为依据,而应以会话中保存的已登录的用户身份信息为准;
¨ 必须在服务器端对每个请求URL进行鉴权,而不能仅仅通过客户端的菜单屏蔽或者按钮Disable、隐藏来限制。
【黑盒测试】
角色/授权测试
在应用程序的各个部分中,用户可以在数据库中增加信息(例如,付款、增加联系人、或发送邮件),收到信息(帐户报表、订单详情等),或删除信息(删除用户、邮件等)。因此有必要记录这些功能。测试应使用另外一个用户尝试访问这些功能。例如:是否能进入当前角色/权限所不能进入的功能(但允许其它用户访问) 。
例如,下面的HTTP POST 允许属于grp001 的用户读取订单#0001:
POST /user/viewOrder.jsp HTTP/1.1
Host: www.example.com
...
gruppoID=grp001&ordineID=0001
测试不属于grp001 的用户是否可以修改‘gruppoID '和' ordineID '的参数值从而读取这一特权数据。
例如,下面的服务器的回答显示出在成功验证后HTML 中返回给用户的隐藏字段。
HTTP/1.1 200 OK
Server:Netscape-Enterprise/6.0
Date: Wed, 1 Apr 2006 13:51:20 GMT
Set-Cookie:USER=aW78ryrGrTWs4MnOd32Fs51yDqp; path=/; domain=www.example.com
Set-Cookie: SESSION=k+KmKeHXTgDi1J5fT7Zz;path=/; domain= www.example.com
Cache-Control: no-cache
Pragma: No-cache
Content-length: 247
Content-Type: text/html
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Connection: close
<form name=“autoriz"method="POST" action = “visual.jsp">
<inputtype="hidden" name="profilo"value="SistemiInf1">
<bodyοnlοad="document.forms.autoriz.submit()">
</td>
</tr>
如果测试者将变量的值“ profilo ”修改成“ SistemiInf9 ” 会怎么样呢?这样是否有可能成为管理员?
预期结果
测试应核实执行特权升级尝试不成功。
测试工具:
以上来自《OWASP测试指南(中文)》学习汇总整理,特此说明!