逻辑漏洞介绍 & 越权访问攻击 & 修复建议
介绍逻辑漏洞
逻辑漏洞就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。其中越权访问又有水平越权和垂直越权两种,如下所示。
- 水平越权:相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问、修改或者删除其他用户信息的非法操作。如果出现此漏洞,可能会造成大批量数据的泄露,严重的甚至会造成用户信息被恶意篡改。
- 垂直越权:就是不同级别之间的用户或不同角色之间用户的越权,比如普通用户可以执行管理员才能执行的功能。
逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。精明的攻击者会特别注意目标应用程序采用的逻辑方式,并设法了解设计者与开发者可能做出的假设,然后考虑如何攻破这些假设,黑客在挖掘逻辑漏洞时有两个重点:业务流程和HTTP/HTTPS请求篡改。
常见的逻辑漏洞有以下几类。 - 支付订单:在支付订单时,可以篡改价格为任意金额;或者可以篡改运费或其他费用为负数,导致总金额降低。
- 越权访问:通过越权漏洞访问他人信息或者操纵他人账号。
- 重置密码:在重置密码时,存在多种逻辑漏洞,比如利用session覆盖重置密码、短信验证码直接在返回的数据包中等。
- 竞争条件:竞争条件常见于多种攻击场景中,比如前面介绍的文件上传漏洞。还有一个常见场景就是购物时,例如用户A的余额为10元,商品B的价格为6元,商品C的价格为5元,如果用户A分别购买商品B和商品C,那余额肯定是不够的。但是如果用户A利用竞争条件,使用多线程同时发送购买商品B和商品C的请求,可能会出现以下这几种结果。
- 有一件商品购买失败。
- 商品都购买成功,但是只扣了6元。
- 商品都购买成功,但是余额变成了-1元。
越权访问攻击
页面实现的功能是,当用户登录系统后,可以通过该页面查看自己的密码,该URL中存在一个参数username=zhangsan,当我们把参数username改为lisi之后,则可看到用户lisi的信息。


数据库是这样滴:

越权访问代码分析
服务端处理用户查询个人信息的代码如下,程序设计的思路如下所示
<html>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
<title>个人信息</title>
</head>
<body>
<?php
$con=mysqli_connect("localhost","root","qwer","test");
if (mysqli_connect_errno())
{
echo "连接失败: " . mysqli_connect_error();
}
if (isset($_GET['username'])) {
$result = mysqli_query($con,"select * from users where `username`='".addslashes($_GET['username'])."'");
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
exit(
'用 户:<input type="text" name="username" value="'.$row['username'].'" > <br />'.
'密 码:<input type="password" value="'.$row['password'].'" > <br />'.
'邮 箱:<input type="text" value="'.$row['email'].'" > <br />'.
'地 址:<input type="text" value="'.$row['address'].'" > <br />'
);
}else{
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query($con,"select * from users where `username`='".addslashes($username)."' and `password` = '".($password)."'");
$row = mysqli_fetch_array($result);
if ($row) {
exit("登录成功"."<a href='login.php?username=".$username."' >个人信息</a>");
}else{
exit("登录失败");
}
}
?>
</body>
</html>
- 在else语句中获取POST的参数username和参数password,然后到数据库中查询,如果正确,则登录成功,然后跳转到login.php?username=$username处(if语句)。
- if语句中是登录成功后的代码,获取GET的参数username,然后到数据库中查询参数username的所有信息,并返回到页面上。但是此处没有考虑的是,如果直接访问login.php?username=admin, 那么将直接执行if语句中的代码,而没有执行else语句中的代码,所以此处不需要登录就可以查看admin的信息,通过这种方式,就可以越权访问其他用户的信息。
修复建议
越权访问漏洞产生的主要原因是没有对用户的身份做判断和控制,防护这种漏洞时,可以通过session来控制。例如在用户登录成功后,将username或uid写入到session中,当用户查看个人信息时,从session中取出username, 而不是从GET或POST取username,那么此时取到的username就是没有被篡改的。
逻辑漏洞介绍 & 越权访问攻击 & 修复建议的更多相关文章
- XXE漏洞介绍 & XXE漏洞攻击 & 修复建议
介绍XXE漏洞 XML外部实体注入(XML External Entity)简称XXE漏洞,XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是-种允许用户对自己的标记语 ...
- 命令执行漏洞攻击&修复建议
应用程序有时需要调用一些执行系统命令的函数,如在PHP中,使用system.exec.shell_exec.passthru.popen.proc_popen等函数可以执行系统命令.当黑客能控制这些函 ...
- Web渗透测试漏洞手册及修复建议
Web渗透测试漏洞手册及修复建议 0x0 配置管理 0x01 HTTP方法测试 漏洞介绍: 目标服务器启用了不安全的传输方法,如PUT.DELETE等,这些方法表示可能在服务器上使用了 WebDAV, ...
- Web安全常见漏洞修复建议
转载地址:https://security.pingan.com/blog/17.html SQL注入 在服务器端要对所有的输入数据验证有效性. 在处理输入之前,验证所有客户端提供的数据,包括所有的参 ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- SSRF漏洞(原理、漏洞利用、修复建议)
介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...
- Web常见漏洞修复建议
一.SQL注入修复建议 1.过滤危险字符,例如:采用正则表达式匹配union.sleep.and.select.load_file等关键字,如果匹配到则终止运行. 2.使用预编译语句,使用PDO需要注 ...
- WEB安全第七篇--终结篇考验逻辑思维:逻辑漏洞大汇总(越权、会话逻辑、业务逻辑、暴力破解)
零.前言 最近做专心web安全有一段时间了,但是目测后面的活会有些复杂,涉及到更多的中间件.底层安全.漏洞研究与安全建设等越来越复杂的东东,所以在这里想写一个系列关于web安全基础以及一些讨巧的pay ...
- web漏洞详解及修复建议
1.漏洞描述 跨站脚本攻击(Cross-site scripting,通常简称为XSS)发生在客户端,可被用于进行窃取隐私.钓鱼欺骗.偷取密码.传播恶意代码等攻击行为. 恶意的攻击者将对客户端有危害的 ...
随机推荐
- PyTorch学习笔记及问题处理
1.torch.nn.state_dict(): 返回一个字典,保存着module的所有状态(state). parameters和persistent_buffers都会包含在字典中,字典的key就 ...
- 如何为指定python解释器安装pip
有时候我们通常会有很多python解释器,例如python2.python3.python(Anaconda). 参考链接:https://www.cnblogs.com/michaelcjl/p/1 ...
- IDEA报错:Class JavaLaunchHelper is implemented in both
在IDEA运行一个程序时报错: Class JavaLaunchHelper is implemented in both 这个错误是Mac下Java 的一个bug,意思是这个JavaLaunchHe ...
- Windows servers 2008 环境下,域控DC和DNS,分离搭建过程。
近来做有关于window服务器方面运维的实验,正好借此记录下来,便于日后回顾. 通常情况下,域控DC服务器和DNS服务器一般不在一起,所以需要将其分开建立.而这个时候两个服务器的建立有先后顺序,本文会 ...
- 集成学习小结(RF、adaboost、xgboost)
目录 回顾监督学习的一些要素 集成学习(学什么) bagging boosting 梯度提升(怎么学) GBDT Xgboost 几种模型比较 Xgboost 与 GBDT xgboost 和 LR ...
- Qt setMouseTracking使用
Qt setMouseTracking使用(转载) bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效. 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标 ...
- 力扣leetcode 56. 合并区间
56. 合并区间 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: ...
- PyTorch迁移学习-私人数据集上的蚂蚁蜜蜂分类
迁移学习的两个主要场景 微调CNN:使用预训练的网络来初始化自己的网络,而不是随机初始化,然后训练即可 将CNN看成固定的特征提取器:固定前面的层,重写最后的全连接层,只有这个新的层会被训练 下面修改 ...
- 安装oracleXE快捷版(一)
yum找不到包,参考了一些文章,用iso上的包安装了.在文章后面贴有我实际的操作(黑体)和日志. 更换yum源https://www.cnblogs.com/zrxuexi/p/11587173.ht ...
- unimrcp plugin 分析
摘要: unimrcp 访问媒体资源是通过插件实现,社区的代码给出了demo plugin,但是距离一个生产插件还是有一段的距离.这边文章介绍插件的整个逻辑过程,以及如何实现我们自己的插件.