逻辑漏洞介绍 & 越权访问攻击 & 修复建议
介绍逻辑漏洞
逻辑漏洞就是指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改、越权访问、密码找回、交易支付金额等功能处。其中越权访问又有水平越权和垂直越权两种,如下所示。
- 水平越权:相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问、修改或者删除其他用户信息的非法操作。如果出现此漏洞,可能会造成大批量数据的泄露,严重的甚至会造成用户信息被恶意篡改。
- 垂直越权:就是不同级别之间的用户或不同角色之间用户的越权,比如普通用户可以执行管理员才能执行的功能。
逻辑缺陷表现为设计者或开发者在思考过程中做出的特殊假设存在明显或隐含的错误。精明的攻击者会特别注意目标应用程序采用的逻辑方式,并设法了解设计者与开发者可能做出的假设,然后考虑如何攻破这些假设,黑客在挖掘逻辑漏洞时有两个重点:业务流程和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)发生在客户端,可被用于进行窃取隐私.钓鱼欺骗.偷取密码.传播恶意代码等攻击行为. 恶意的攻击者将对客户端有危害的 ...
随机推荐
- google protocol buffer——protobuf的使用特性及编码原理
这一系列文章主要是对protocol buffer这种编码格式的使用方式.特点.使用技巧进行说明,并在原生protobuf的基础上进行扩展和优化,使得它能更好地为我们服务. 在上一篇文章中,我们展示了 ...
- js大数字转换,将大额数字转换为万、千万、亿等
代码 /** * 大数字转换,将大额数字转换为万.千万.亿等 * @param value 数字值 */ export function bigNumberTransform (value) { co ...
- Windows Server 2012 数据库定时备份
为了数据的安全,我们在服务器上设置了每周备份一次,下面是具体步骤: 一.在文件客户端服务器创建db_backup.cmd的Windows命令脚本.输入以下内容(直接复制可能出错,请手动输入): @ec ...
- idea创建mybatis的逆向工程:generator
1在工程的目录下配置mybatis-generator插件 <build> <plugins> <!-- mybatis逆向工程 --> <plugin> ...
- 兄弟们,我打算抠100个网站JS加密代码召唤,一个也跑不掉,这次轮到小虎牙
摘要:友情提示:在博客园更新比较慢,有兴趣的关注知识图谱与大数据公众号吧.本次研究虎牙登录密码加密JS代码,难度不大,依然建议各位读者参考文章独自完成,实在抠不出来再参考这里的完整代码:从今天开始种树 ...
- 今天来学习一下MySQl的 临时表,变量,行转列,预处理的一些相关技术的使用!
先来简单了解一下MySQL数据库有意思的简介 MySQL这个名字,起源不是很明确.一个比较有影响的说法是,基本指南和大量的库和工具带有前缀“my”已经有10年以上, 而且不管怎样,MySQL AB创始 ...
- 拾色器,可以取出电脑屏幕的任何颜色,ui以及程序员前端等常用软件,文件很小,300K
作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985,转载请说明出处. 今天给大家介绍一个小软件,挺实用的,叫做拾色器. 用途:取出电脑屏幕的任意颜色,当你 ...
- 记录call、apply、bind的源码
记录一下call.apply.bind的源码,然后从根本上明白其用法. 都知道call.apply与bind的用法,call(this,...arguments).apply(this,[argume ...
- 剑指 Offer 54. 二叉搜索树的第k大节点
题目描述 给定一棵二叉搜索树,请找出其中第k大的节点. 示例1: 输入: root = [3,1,4,null,2], k = 1 3 / \ 1 4 \ 2 输出: 4 示例2: 输入: root ...
- RGB打水印在YUV图片上
一. 概述 将RGB图片打在YUV上需要注意的是, 字体之外应该透明, 否则背景也会被覆盖不好看, 所以RGB必须有透明度, 本测试格式为BMP ARGB8888(也即B是最低字节, A是最高字节 ...