一、 越权
越权,指攻击者绕过权限认证对功能或敏感内容进行非授权访问,例如:使用用户A的权限去操作用户B的数据,A的权限小于B的权限,如果能够成功操作,则称之为越权操作。 越权漏洞的产生源于系统对用户提交信息缺少必要的权限校验,导致其他用户的信息或用户数据被非法篡改或查询。该漏洞导致的直接结果是信息泄露,严重程度取决于信息的敏感程度。
一般越权漏洞容易出现在权限页面(如查询类操作、账号修改、转账交易)增、删、改、查的的地方,当用户对权限页面内的信息进行这些操作时,服务端需对请求报文中的身份校验参数进行合法性校验,看其是否具备操作的权限,从而给出响应,而如果校验的规则过于简单则容易出现越权漏洞。
二、水平越权
水平越权指的是某用户通过越权操作同类型别的用户的账号内容。
用户A和用户B属于同一级别用户,但各自不能操作对方个人信息。用户A如果越权操作用户B个人信息的情况称为水平越权操作,Pikachu靶场有两个用户,分别为“lucy”和“lili”,密码都为123456.
以用户“lucy ”身份登陆,可以看到地址栏里“url为op1_mem.php?username=lucy&submit=点击查看个人信息”:
退出“lucy”,登录“lili”用户,此时可以看到地址只有username不同:
在”lili”账号下开启抓包:
在抓包工具里将抓到的报文中的“lili”修改为“lucy”:
点击发送,可以在以“lili”权限下看到“lucy”的具体信息:
三、原因分析:
只判断是否登陆,没有用session校验。
查看function.php中的check_op_login函数,只是判断了['op']['username']和['op']['password']是否被定义:
查看登录页面的代码,发现所有用户名登录后都会定义['op']['username']和['op']['password']。
因为在查看信息的界面,只判断了是否登录,并没有判断是哪个用户。
四、优化建议
在重要操作(如转账交易、查询类操作、账号修改)时,系统应对用户权限进行校验,防止水平越权:
1.用户级操作,用户身份信息通过session中获取,避免通过客户端上送的用户信息被恶意篡改,导致越权执行他人权限操作;
2.如果客户端必须上送操作对象参数,系统应在服务器端对用户输入数据的合法性和有效性进行校验,判断请求的账号是否为登陆客户本人账户,防止水平越权(如用户A通过修改ID越权对用户B的账号进行操作);
3.在校验过程中,不要给页面返回账户相关信息,整个校验工作流程都在服务端完成,只传递给页面成功或失败的状态结果。
作者:陈明坤