逻辑漏洞(越权访问和支付漏洞)

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记

前文链接

  1. WAMP/DVWA/sqli-labs 搭建
  2. burpsuite工具抓包及Intruder暴力破解的使用
  3. 目录扫描,请求重发,漏洞扫描等工具的使用
  4. 网站信息收集及nmap的下载使用
  5. SQL注入(1)——了解成因和手工注入方法
  6. SQL注入(2)——各种注入
  7. SQL注入(3)——SQLMAP
  8. SQL注入(4)——实战SQL注入拿webshell
  9. Vulnhub靶机渗透之Me and My Girlfriend
  10. XSS漏洞
  11. 文件上传漏洞
  12. 文件上传绕过
  13. 文件包含漏洞
  14. Vulnhub靶机渗透之zico2
  15. 命令执行漏洞

介绍

逻辑漏洞指攻击者利用业务的设计缺陷,获取敏感信息或破坏业务的完整性。一般出现在密码修改,越权访问,密码找回,交易支付金额等功能处。本篇着重讲解越权访问漏洞和交易漏洞。

逻辑漏洞表现为开发者或设计者在开发过程中对逻辑的不正确判断,也就是写代码不够认真,从而产生的漏洞,是人为造成的。

越权访问

分为水平越权和垂直越权。

  • 水平越权: 相同级别(权限)的用户或者同一角色中不同的用户之间,可以越权访问、修改或者删除其他用户信息的非法操作。如果出现此漏洞,可能会造成大批量数据的泄露,严重的甚至会造成用户信息被恶意篡改。

  • 垂直越权: 不同级别之间的用户或不同角色之间的越权,比如普通用户可以执行管理员才能执行的功能。

在我实际渗透中,某次遇到一个网站存在水平越权漏洞,当时网站某些部分需要邀请新用户或充值才能访问,但我作为0氪用户,是不可能搞这些的。但我抓包发现存在水平越权漏洞,可以查看,修改其它用户的密码。因此我就一直用别人的账号。那个网站至今还没有修复这个漏洞。
在这里插入图片描述
垂直越权最常见的就是普通用户执行了管理员的操作,例如在DedeCMS中,普通用户可以非法修改管理员(admin)的密码。以及前文的代码执行漏洞,使普通用户有操控服务器的权限。都属于垂直越权。

按照习惯,先来一个实例。

某网站可以查看用户密码,但是存在越权访问漏洞。

由于只是实例,这里就不连接数据库了。

index.php

<?php
    $users=array(
        "1"=>"123456",
        "2"=>"HelloWorld",
        "3"=>"manlu"
    );
    if (isset($_COOKIE['id'])){
        $id=$_COOKIE['id'];
    }else{
        setcookie("id",'1');
        header("Refresh:0");
    }
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>查看用户信息</title>
</head>
<body>
<label for="id">用户id:</label>
<input type="text" id="id" value="<?=$id?>"><br>
<label for="pwd">用户密码:</label>
<input type="password" id="pwd" value="<?=$users[$id]?>"><button>查看</button>
<script>
    document.getElementsByTagName('button')[0].onclick=function () {
        document.getElementById("pwd").type="text";
    }
</script>
</body>
</html>

访问该界面,可以看到id为1的用户的密码。
在这里插入图片描述
按下F12查看cookie,发现了参数id
在这里插入图片描述
假如将参数id改为其他的数字,就可以看到其它用户的密码。

当id为2时
在这里插入图片描述
这就是一次水平越权访问漏洞。

假如某个存在水平越权漏洞的网站允许用户更改密码,攻击者可以修改其它用户的密码,同时配合脚本,可以获取所有用户的信息。

垂直越权
还是刚才的实例,假如用户表中还存储了admin的账号密码,就可以非法得到admin的账号密码。

$users=array(
        "0"=>"admin",
        "1"=>"123456",
        "2"=>"HelloWorld",
        "3"=>"manlu"
    );

在这里插入图片描述

支付漏洞

常见的支付漏洞有:

  • 支付订单: 在支付订单时,可以篡改价格为任意金额;或者可以篡改运费或其他费用为负数,导致总金额降低。

  • 竞争条件: 在前文的文件上传漏洞中有提到,利用于多种场景。假如用户A余额为10元,商品B价格为6元,C价格为5元,假如A想购买B和C,余额是不够的。但是如果A利用竞争条件,使用多线程同时发送购买商品的请求,可能会出现以下几种结果:
    ①有一件商品购买成功
    ②商品都购买成功,但只扣了6元
    ③商品都购买成功,余额变为-1

直接上实例

index.php

<?php
    $balance=0;
    if (isset($_COOKIE['balance'])){
        $balance=(double)$_COOKIE['balance'];
    }else{
        setcookie("balance","10");
        header("Refresh:0");
    }
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>购买</title>
</head>
<body>
<div>
    <h2>余额:<?=$balance?></h2>
</div>
<form id="form">
    <label for="price">商品价格:</label><br>
    <input type="text" disabled="disabled" value="6"><br>
    <label for="number">购买数量:</label><br>
    <input type="number" id="number" value="1" name="number"><br>
    <input type="button" value="确认购买" id="btn">
</form>
<script>
    document.getElementById("btn").onclick=function () {
        var form=document.getElementById("form");
        var formdata=new FormData(form);
        formdata.append("price",'6');
        var xhr=new XMLHttpRequest();
        xhr.open("POST","buy.php",true);
        xhr.send(formdata);
        xhr.onreadystatechange=function()
        {
            if (xhr.readyState==4 && xhr.status==200)
            {
                var text=xhr.responseText;
                alert(text);
                location.reload();
            }
        }
    };
</script>
</body>
</html>

buy.php

<?php
    $price=(double)$_POST['price'];
    $number=(int)$_POST['number'];
    $balance=(double)$_COOKIE['balance'];
    $money=$number*$price;
    if ($balance>$money){
        setcookie("balance",(string)($balance-$money));
        echo "购买成功";
    }else{
        echo "余额不足";
    }
    ?>

在这里存在两种漏洞利用的方式,修改数量和修改金额(修改余额是不行的,实际渗透中余额都存在数据库中,这里为了方便存在cookie中)。

访问网站,发现给了我们10块钱
在这里插入图片描述
发现这里可以修改购买数量。

打开bp,点击确认购买,抓包查看。
在这里插入图片描述
在这里将购买数量number改为 -1
在这里插入图片描述
发送,购买成功,发现余额变成了16
在这里插入图片描述
在这里插入图片描述

此外还可以修改商品金额,还是同样的抓包,把金额price改为 -10
在这里插入图片描述
发送,弹出购买成功
在这里插入图片描述
发现余额变为20
在这里插入图片描述

竞争条件在此不掩饰,可自行测试。

防范

越权访问
严格检查用户的Cookie,做好身份确认

购买漏洞
严格处理用户的输入,不要相信前端规范,在后端进行防范。

热门文章

暂无图片
编程学习 ·

Java输出数组的内容

Java输出数组的内容_一万个小时-CSDN博客_java打印数组内容1. 输出内容最常见的方式// List<String>类型的列表List<String> list new ArrayList<String>();list.add("First");list.add("Second");list.add("Third");list.ad…
暂无图片
编程学习 ·

母螳螂的“魅惑之术”

在它们对大蝗虫发起进攻的时候&#xff0c;我认认真真地观察了一次&#xff0c;因为它们突然像触电一样浑身痉挛起来&#xff0c;警觉地面对限前这个大家伙&#xff0c;然后放下自己优雅的身段和祈祷的双手&#xff0c;摆出了一个可怕的姿势。我被眼前的一幕吓到了&#xff0c;…
暂无图片
编程学习 ·

疯狂填词 mad_libs 第9章9.9.2

#win7 python3.7.0 import os,reos.chdir(d:\documents\program_language) file1open(.\疯狂填词_d9z9d2_r.txt) file2open(.\疯狂填词_d9z9d2_w.txt,w) words[ADJECTIVE,NOUN,VERB,NOUN] str1file1.read()#方法1 for word in words :word_replaceinput(fEnter a {word} :)str1…
暂无图片
编程学习 ·

HBASE 高可用

为了保证HBASE是高可用的,所依赖的HDFS和zookeeper也要是高可用的. 通过参数hbase.rootdir指定了连接到Hadoop的地址,mycluster表示为Hadoop的集群. HBASE本身的高可用很简单,只要在一个健康的集群其他节点通过命令 hbase-daemon.sh start master启动一个Hmaster进程,这个Hmast…
暂无图片
编程学习 ·

js事件操作语法

一、事件的绑定语法 语法形式1 事件监听 标签对象.addEventListener(click,function(){}); 语法形式2 on语法绑定 标签对象.onclick function(){} on语法是通过 等于赋值绑定的事件处理函数 , 等于赋值本质上执行的是覆盖赋值,后赋值的数据会覆盖之前存储的数据,也就是on…
暂无图片
编程学习 ·

Photoshop插件--晕影动态--选区--脚本开发--PS插件

文章目录1.插件界面2.关键代码2.1 选区2.2 动态晕影3.作者寄语PS是一款栅格图像编辑软件&#xff0c;具有许多强大的功能&#xff0c;本文演示如何通过脚本实现晕影动态和选区相关功能&#xff0c;展示从互联网收集而来的一个小插件&#xff0c;供大家学习交流&#xff0c;请勿…
暂无图片
编程学习 ·

vs LNK1104 无法打开文件“xxx.obj”

写在前面&#xff1a; 向大家推荐两本新书&#xff0c;《深度学习计算机视觉实战》和《学习OpenCV4&#xff1a;基于Python的算法实战》。 《深度学习计算机视觉实战》讲了计算机视觉理论基础&#xff0c;讲了案例项目&#xff0c;讲了模型部署&#xff0c;这些项目学会之后可以…
暂无图片
编程学习 ·

工业元宇宙的定义与实施路线图

工业元宇宙的定义与实施路线图 李正海 1 工业元宇宙 给大家做一个关于工业元宇宙的定义。对于工业&#xff0c;从设计的角度来讲&#xff0c;现在的设计人员已经做到了普遍的三维设计&#xff0c;但是进入元宇宙时代&#xff0c;就不仅仅只是三维设计了&#xff0c;我们的目…
暂无图片
编程学习 ·

【leectode 2022.1.15】完成一半题目

有 N 位扣友参加了微软与力扣举办了「以扣会友」线下活动。主办方提供了 2*N 道题目&#xff0c;整型数组 questions 中每个数字对应了每道题目所涉及的知识点类型。 若每位扣友选择不同的一题&#xff0c;请返回被选的 N 道题目至少包含多少种知识点类型。 示例 1&#xff1a…
暂无图片
编程学习 ·

js 面试题总结

一、js原型与原型链 1. prototype 每个函数都有一个prototype属性&#xff0c;被称为显示原型 2._ _proto_ _ 每个实例对象都会有_ _proto_ _属性,其被称为隐式原型 每一个实例对象的隐式原型_ _proto_ _属性指向自身构造函数的显式原型prototype 3. constructor 每个prot…
暂无图片
编程学习 ·

java练习代码

打印自定义行数的空心菱形练习代码如下 import java.util.Scanner; public class daYinLengXing{public static void main(String[] args) {System.out.println("请输入行数");Scanner myScanner new Scanner(System.in);int g myScanner.nextInt();int num g%2;//…
暂无图片
编程学习 ·

RocketMQ-什么是死信队列?怎么解决

目录 什么是死信队列 死信队列的特征 死信消息的处理 什么是死信队列 当一条消息初次消费失败&#xff0c;消息队列会自动进行消费重试&#xff1b;达到最大重试次数后&#xff0c;若消费依然失败&#xff0c;则表明消费者在正常情况下无法正确地消费该消息&#xff0c;此时…
暂无图片
编程学习 ·

项目 cg day04

第4章 lua、Canal实现广告缓存 学习目标 Lua介绍 Lua语法 输出、变量定义、数据类型、流程控制(if..)、循环操作、函数、表(数组)、模块OpenResty介绍(理解配置) 封装了Nginx&#xff0c;并且提供了Lua扩展&#xff0c;大大提升了Nginx对并发处理的能&#xff0c;10K-1000K Lu…
暂无图片
编程学习 ·

输出三角形

#include <stdio.h> int main() { int i,j; for(i0;i<5;i) { for(j0;j<i;j) { printf("*"); } printf("\n"); } }
暂无图片
编程学习 ·

stm32的BOOTLOADER学习1

序言 最近计划学习stm32的BOOTLOADER学习,把学习过程记录下来 因为现在网上STM32C8T6还是比较贵的,根据我的需求flash空间小一些也可以,所以我决定使用stm32c6t6.这个芯片的空间是32kb的。 #熟悉芯片内部的空间地址 1、flash ROM&#xff1a; 大小32KB&#xff0c;范围&#xf…
暂无图片
编程学习 ·

通过awk和shell来限制IP多次访问之学不会你打死我

学不会你打死我 今天我们用shell脚本&#xff0c;awk工具来分析日志来判断是否存在扫描器来进行破解网站密码——限制访问次数过多的IP地址&#xff0c;通过Iptables来进行限制。代码在末尾 首先我们要先查看日志的格式&#xff0c;分析出我们需要筛选的内容&#xff0c;日志…
暂无图片
编程学习 ·

Python - 如何像程序员一样思考

在为计算机编写程序之前&#xff0c;您必须学会如何像程序员一样思考。学习像程序员一样思考对任何学生都很有价值。以下步骤可帮助任何人学习编码并了解计算机科学的价值——即使他们不打算成为计算机科学家。 顾名思义&#xff0c;Python经常被想要学习编程的人用作第一语言…
暂无图片
编程学习 ·

蓝桥杯python-数字三角形

问题描述 虽然我前后用了三种做法&#xff0c;但是我发现只有“优化思路_1”可以通过蓝桥杯官网中的测评&#xff0c;但是如果用c/c的话&#xff0c;每个都通得过&#xff0c;足以可见python的效率之低&#xff08;但耐不住人家好用啊&#xff08;哭笑&#xff09;&#xff09…