10个国内建筑网站,北京工商局网站如何做股东变更,旅游加盟网站建设,seo研究中心道一老师逻辑漏洞#xff08;越权#xff09;
0x01 何为逻辑漏洞
逻辑漏洞是指#xff0c;在编写程序的时#xff0c;一个流程处理处理逻辑#xff0c;不够谨慎或逻辑不完整#xff0c;从而造成验证失效、敏感信息暴露等问题#xff0c;这类问题很难利用工具去发现#xff0c…逻辑漏洞越权
0x01 何为逻辑漏洞
逻辑漏洞是指在编写程序的时一个流程处理处理逻辑不够谨慎或逻辑不完整从而造成验证失效、敏感信息暴露等问题这类问题很难利用工具去发现这是因为逻辑漏洞可能不会通过传统的输入过滤和验证来解决而需要对整个逻辑进行重新审查和重构所以挖掘逻辑漏洞的最好方式还是手动测试。
0x02 什么是越权
在日常使用的软件程序都会存在权限这一概念它用于控制信息资源的保密性、完整性它可以帮助我们来定义信息资源如何被合法的访问。
而越权漏洞就是指在系统中某个实体用户、程序等越过了其授权范围获得了未授权的权限或者访问权。
在这个前提下越权漏洞又分为
1. 水平越权
- 在未授权的情况下访问相同权限的资源。
2. 垂直越权
- 在未授权的情况下访问比自己权限更高的资源。在权限框架中我们使用的最多的就的登录系统登录后验证用户登录的权限来确定用户能的权限登录验证的流程一般如下
提交登录请求 输入账号密码发送请求至服务端 验证账号密码是否正确 后端对输入的账号密码进行验证检查其是否在数据库中存在确保合法用户的登录 验证账号权限 确认用户登录后系统会查询其权限信息确定其所拥有的角色和权限。系统根据用户的角色和权限验证用户对资源的访问权限确保用户只能访问其被授权的资源或执行被授权的操作。 完成登录 当用户的账号密码验证成功且权限验证通过后用户便完成了登录流程系统可以为其创建一个会话并授予相应的访问权限。
越权漏洞的尝试就在第3步如果在账号权限的过程中验证不够严谨或者验证的逻辑存在漏洞就非常容易造成越权漏洞的产生。
0x03 水平越权
水平越权是一种安全漏洞指的是攻击者利用漏洞来获取其他用户相同权限级别的资源或信息超越其授权的范围。这种漏洞可能发生在系统对用户身份验证和权限管理方面的不足或错误实现上。
举个例子假设一个系统允许普通用户访问其他普通用户的私密文件或信息而不限制只能访问自己的信息。攻击者利用这种漏洞通过某种方式获取其他用户的身份信息或敏感数据这就是水平越权漏洞。
if(isset($_GET[submit]) $_GET[username]!null){$usernameescape($link, $_GET[username]);$queryselect * from member where username$username;$resultexecute($link, $query);if(mysqli_num_rows($result)1){$datamysqli_fetch_assoc($result);$uname$data[username];$sex$data[sex];$phonenum$data[phonenum];$add$data[address];$email$data[email];
这一串代码就存在水平越权漏洞它没有对传入的username 进行进一步的验证而且是使用GET方法进行传参所以在URL中就可以进行越权。
pikachu 水平越权 使用作者给的用户名登录。 点击查看个人信息。 在此处查询到登录用户的个人信息在URL里也存在参数暴露。一旦我们修改用户名就可以查看其他用户的信息因为这里没有进一步的验证应该在查看用户信息时要再次验证本地登录用户的信息验证完成后在显示验证后的用户信息。 当我将username的值改为其他用户就可以获取到其他用户的信息这个就是水平越权在相同权限的情况区获取其他用户的信息。
0x04 垂直越权
垂直越权与水平越权相对应。它指的是攻击者通过漏洞提升自己的权限从而获取比其授权权限更高级别的资源或信息。通常出现在系统权限管理不严谨的情况下允许某些用户越权访问敏感信息或执行高权限操作。
if(isset($_POST[submit])){if($_POST[username]!null $_POST[password]!null){$usernameescape($link, $_POST[username]);$passwordescape($link, $_POST[password]);$queryselect * from users where username$username and passwordmd5($password);$resultexecute($link, $query);if(mysqli_num_rows($result)1){$datamysqli_fetch_assoc($result);if($data[level]1){$_SESSION[op2][username]$username;$_SESSION[op2][password]sha1(md5($password));$_SESSION[op2][level]1;header(location:op2_admin.php);}if($data[level]2){$_SESSION[op2][username]$username;$_SESSION[op2][password]sha1(md5($password));$_SESSION[op2][level]2;header(location:op2_user.php);}}else{$html.p登录失败,请重新登录/p;}}此时在登录页面代码中可以看出该代码对用户权限进行的分类登录假如level1 它就是管理员账户登录的页面是op2_admin.php, 假如level2 它就是普通账户登录后的页面也就到了op2_user.php页面。这是对登录时用户验证的基础方法。
if(isset($_POST[submit])){if($_POST[username]!null $_POST[password]!null){$getdataescape($link, $_POST);$queryinsert into member(username,pw,sex,phonenum,email,address) values({$getdata[username]},md5({$getdata[password]}),{$getdata[sex]},{$getdata[phonenum]},{$getdata[email]},{$getdata[address]});$resultexecute($link, $query);if(mysqli_affected_rows($link)1){header(location:op2_admin.php);}else {$html.p修改失败,请检查下数据库是不是还是活着的/p;}}
}
这一串代码是一个用于新用户创建的代码如果在此处没有对用户权限的二次验证那么就会造成任意用户都可以创建新用户。
pikachu 垂直越权 我们先用管理账户登录。 在管理账户页面可以发现它比普通用户多了一个添加用户的功能点。 点击添加用户我们进入到该页面随意创建一个新用户并用BP抓包 虽然普通用户无法进入到该页面但是由于在创建用户的界面没有对用户权限的二次验证在此任意用户只需要使用URL拼接访问到该网络就可以进行管理账户的操作创建一个新的账户。 这是使用管理员账户创建的用户现在我在登录一个普通用户并使用BP抓取它的session-id。 此处我们登录的是一个普通用户它的session-id为vcnpk9vbsdiqkk1fi5cj2pf1o2接下来就把它拼接到之前的op2_admin_edit.php请求头中去。 此时已经成功的跳转到这个页面当中我们使用普通账户添加的账户应该也是成功的写入到数据库当中 这是是在进行敏感操作时候未对账户的权限进行进一步的验证所以就造成了垂直漏洞的产生。
0x05 越权漏洞产生的位置
隐藏的URL 系统中存在可以被未授权用户访问的隐藏链接这些链接可能未经过适当的身份验证。 直接引用的参数 当系统未对直接引用的参数进行适当的权限验证时攻击者可以通过修改参数值来获取未授权的资源。 多阶段功能 如果系统中某个功能经过多个步骤完成但在后续步骤未再次验证权限攻击者可能在某个步骤通过合法验证后访问其不应有权限的资源。 静态文件 系统中的静态文件或资源如配置文件、日志文件如果未经过适当保护可能被攻击者直接访问导致信息泄露。 平台配置错误 错误的平台配置或安全设置不当可能导致未授权访问的风险。
0x06 防范措施总结
合适的身份验证和授权 在任何可访问敏感信息或执行关键操作的地方进行适当的身份验证和权限控制。 谨慎处理输入参数 对用户输入进行严格验证和过滤不信任任何直接传递给系统的输入。 最小权限原则 给予用户仅所需的最小权限避免授予不必要的权限。 安全配置文件 对静态文件和配置文件进行适当的权限设置和保护确保未经授权用户无法直接访问这些文件。 安全审计与漏洞扫描 定期进行安全审计使用漏洞扫描工具检测系统中可能存在的漏洞及时修复。