当前位置: 首页 > news >正文

49_逻辑漏洞

逻辑漏洞

一、弱口令

弱口令就没什么好说的,密码太简单导致的
在这里插入图片描述

二、暴力破解

1. 环境搭建

先搭建一个环境
下面代码,就是一个简单的登录框验证

<?php
if (isset($_GET['username']) && isset($_GET['password'])){
    if ($_GET['username'] == 'admin' && $_GET['password'] == 'admin'){
        echo "ok 登陆成功";
    }
    else{
        echo "登陆失败,请重试";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="./login_brute.php">
    用户名:<input name="username">
    密码:<input name="password">
    <button value="submit">提交</button>
</form>
</body>
</html>

登陆失败
在这里插入图片描述
用户名和密码都是admin的时候登录成功
在这里插入图片描述

2. burpsuite的暴力破解模块

先抓取一个请求包
账户密码随意
在这里插入图片描述
然后右键发送到Intruder模块,这个模块就是burpsuite的暴力破解模块
在这里插入图片描述
暴力破解模块界面如下
上面有个攻击类型选择
在这里插入图片描述
有四种攻击类型
在这里插入图片描述

(1) Sniper模块

只有一个payload set
我这里加了三个payload
payload数量为3,请求包数量为6

原本的username为aaa,password为bbb
排列组合如下:
username: admin    password: bbb
username: root     password: bbb
username: hello    password: bbb
username: aaa      password: admin
username: aaa      password: root
username: aaa      password: hello

在这里插入图片描述

(2) Battering ram模块

只有一个payload set
我这里加了三个payload
payload数量为3,请求包数量为3

原本的username为aaa,password为bbb
排列组合如下:
username: admin    password: admin
username: root     password: root
username: hello    password: hello

在这里插入图片描述

(3) Pitchfork模块

有两个payload set
我这里每一个payload set都加了三个payload
payload数量为3,请求包数量为3

原本的username为aaa,password为bbb
排列组合如下:
username: admin    password: 111
username: root     password: 222
username: hello    password: 333

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(4) Cluster bomb模块

有两个payload set
我这里每一个payload set都加了三个payload
payload数量为3,请求包数量为9

原本的username为aaa,password为bbb
排列组合如下:
username: admin    password: 111
username: admin    password: 222
username: admin    password: 333
username: root     password: 111
username: root     password: 222
username: root     password: 333
username: hello    password: 111
username: hello    password: 222
username: hello    password: 333

在这里插入图片描述
在这里插入图片描述

(5) 如何判断爆破成功

这里实验,我们要爆破,肯定选择Cluster bomb模块
payload自己随意输入,但是要加上正确的,为了看正确的和错误的有什么区别
从图中发现状态码都是200,代表访问成功
然后爆破成功的字符长度和失败的是有区别的554 和 561
并且爆破成功得到响应包里面,显示ok 登录成功

在这里插入图片描述

三、验证码安全问题

验证码的提出是为了防止暴力破解

1. 验证码

这里也提供了一个验证码代码
通过修改里面for循环的值,来控制验证码识别的复杂程度
这样设置的目的是为了防止AI识别
现在很多网站都会那种防AI识别的,要么选字,要么选择图中带车的等

<?php


//向浏览器输出图片头信息
header('Content-type:image/jpeg');
$width = 120;
$height = 40;
$string = '';//定义变量保存字体,这个一定不能省,不然回报警告
$img = imagecreatetruecolor($width, $height);//imagecreatetruecolor函数建一个真彩色图像
$arr = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
//生成彩色像素
$colorBg = imagecolorallocate($img, rand(200, 255), rand(200, 255), rand(200, 255));//背景     imagecolorallocate函数为一幅图像分配颜色
//填充函数,xy确定坐标,color颜色执行区域填充颜色
imagefill($img, 0, 0, $colorBg);
/*	可省略
 * $colorBorder=imagecolorallocate($img,rand(200,255),rand(200,255),rand(200,255));//边框
 *imagerectangle($img,0,0,$width-1,$height-1,$colorBorder);
 */
//该循环,循环画背景干扰的点
for ($m = 0; $m <= 100; $m++) {
    $pointcolor = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255));//点的颜色
    imagesetpixel($img, rand(0, $width - 1), rand(0, $height - 1), $pointcolor);// 水平地画一串像素点
}
//该循环,循环画干扰直线
for ($i = 0; $i <= 4; $i++) {
    $linecolor = imagecolorallocate($img, rand(0, 255), rand(0, 255), rand(0, 255));//线的颜色
    imageline($img, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $linecolor);//画一条线段
}
for ($i = 0; $i < 4; $i++) {
    $string .= $arr[rand(0, count($arr) - 1)];
}
$colorString = imagecolorallocate($img, rand(10, 100), rand(10, 100), rand(10, 100));//文本
setcookie('code',$string,3600+time());

//echo $colorString;
//2种插入字符串字体的方式
//imgettftext($img,字体大小(数字),角度(数字),rand(5,15),rand(30,35),$colorString,'字体样式的路径',$string);
imagestring($img, 5, rand(0, $width - 36), rand(0, $height - 15), $string, $colorString);
//输出图片到浏览器
imagejpeg($img);
//销毁,释放资源
imagedestroy($img);

?>

在这里插入图片描述

2. 登录加验证码

修改了原本的登录代码,加上了验证码认证
验证码代码的cookie这里也设置了时间
验证码内容保存在了cookie里面
在这里插入图片描述

<?php
if (isset($_GET['username']) && isset($_GET['password'])){
    if(isset($_GET['captcha'])&& $_GET['captcha'] == $_COOKIE['code']){

    }
    else{
        exit('验证码错误');
    }
    if ($_GET['username'] == 'admin' && $_GET['password'] == 'admin'){
        echo "ok 登陆成功";
    }
    else{
        echo "登陆失败,请重试";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="./login_brute.php">
    用户名:<input name="username"><br>
    密码:<input name="password"><br>
    验证码: <input name="captcha"> <img src="captcha.php"><br>
    <button value="submit">提交</button>
</form>
</body>
</html>

验证码输入错误

在这里插入图片描述
验证码输入正确,然后账户密码错误
在这里插入图片描述
验证码输入正确,账户密码正确

在这里插入图片描述

3. 验证码前端可读

验证码保存在cookie中
即便攻击者无法识别该验证码
但是攻击者也可以直接从cookie中读取正确的验证码的值
在这里插入图片描述
如何修复这种问题?
既然cookie直接可读,那么我们将验证码存放在session中,session是储存在服务器中

修改一下源代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次抓包,cookie中无法直接读取验证码
在这里插入图片描述
调试了一下,确保session中存在code值
在这里插入图片描述

4. 验证码复用

我们的验证码是为防止暴力破解的
但是这里存在一个问题
如果我们只要提供了一个正确的验证码
那么就可以进行暴力破解了
在这里插入图片描述
通过使用正确的验证码,还是进行暴力破解成功了
在这里插入图片描述
如何解决验证码复用的问题?
可以修改一下源代码
在校验session值之后,删除session变量
那么第二次访问的时候,就不存在session变量进行校验了
在这里插入图片描述

5. 验证码置空绕过

上面的删除session之后,还存在安全问题
如果将验证码置为空
再次抓包分析
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现在就变成了 ‘’ == null ,结果是true
在这里插入图片描述
然后进行爆破,还是爆破成功了
在这里插入图片描述
在这里插入图片描述

那么如何修复置空绕过?
只需要加上一个验证sesion中是否存在code即可
那么置空的时候,if条件就为假,无法进行暴力破解了
在这里插入图片描述

6. ocr插件识别验证码

这里使用一个github上的插件xp_CAPTCHA
https://github.com/smxiazi/NEW_xp_CAPTCHA
在这里插入图片描述

(1) burp安装插件

按照下面图片顺序,就可安装完成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2) 使用方法

参考文章
https://blog.csdn.net/zdn2325/article/details/125523694

我这里实验没成功,按照步骤来了,但是验证码一直是0000
下面是参考文章的截图,效果就是如下的
在这里插入图片描述

在这里插入图片描述

7. 手机验证码构造回显包绕过

在这里插入图片描述
这里提供一些案例,可以自己去看看
没办法搭建靶场

原理就是将错误的相应包内容替换成正确的相应包
比如说
{“message”:“false”} 替换成 {“message”:“true”}
在这里插入图片描述

在这里插入图片描述

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0120951
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0151201
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0150584
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0216112

8. 用户名 手机号 验证码 不一致性校验问题

在这里插入图片描述
修改请求包中的手机号
比如说修改密码的请求包中的手机号是别人的,然后 要给别人发验证码
那么你改成自己的手机号,就给你手机发验证码
那么你就可以成功修改别人账号的密码

构想数据库如何操作,就是如下图的流程
在这里插入图片描述

看看下面的案例就行
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0102205
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2014-080315

四、短信轰炸漏洞

1. 介绍

能够向特定目标短时间内发送大量的短信
出现位置: 任何能够发送验证码的位置理论上都可能存在
使用: 点击发送短信 抓取对应的请求包 发送到repeater 重发 看是否能收到多个请求包

参考文章:
https://www.freebuf.com/articles/web/288626.html
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0180488
https://wy.zone.ci/searchbug.php?q=%E7%9F%AD%E4%BF%A1%E8%BD%B0%E7%82%B8

在这里插入图片描述
在这里插入图片描述

2. 重发包常见的错误提示:

  1. 验证码失效
    尝试ocr识别验证码
  2. 手机号达到上限
    考虑使用空格
    13111111111
    13111111111空格
  3. 限制ip 将ipban了
    使用proxy x-forwarded-for: client-ip
  4. cookie session
    清空 随机化

3. 用户名枚举

输入用户名,如果存在,然后进入到给手机号发验证码的步骤
如果不存在,就会提示用户不存在
进而枚举用户
在这里插入图片描述
在这里插入图片描述

五、越权漏洞

在这里插入图片描述

1. 水平越权

用户可以查看其他用户的敏感信息 但是权限并未提升

比如说 普通用户 登录商场 查看自己的订单
但是其他用户的订单 本身无法看到
如果能够看到本不能看到的其他人的订单,或者变成其它用户(非管理员)
但是权限还是普通用户,并没有提升权限,就造成水平越权

参考案例
从案例中总结
当抓包发现形如id 的参数
很有可能涉及到 水平越权

https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0206705
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0204958
https://wy.zone.ci/searchbug.php?q=%E6%B0%B4%E5%B9%B3%E8%B6%8A%E6%9D%83

2. 垂直越权

在这里插入图片描述
垂直越权重点是用户不变
垂直越权一般比较少
要么是水平越权,要么是交叉越权比较多

参考案例:
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2015-0100876

3. 交叉越权

交叉越权,就是用户变了,权限提升
与垂直越权区别就在于用户是否改变

普通的人 低权限 ===> root 身份 高权限

参考案例:
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0192848

六、支付漏洞

0元购
参考案例:
https://wy.zone.ci/bug_detail.php?wybug_id=wooyun-2016-0215059
https://wy.zone.ci/searchbug.php?q=%E6%94%AF%E4%BB%98%E6%BC%8F%E6%B4%9E

我们自己分析一下,这种支付系统的后台如何写代码
在这里插入图片描述
如果 商品1_price 如果可控
本来是10000 修改0.1
通过修改商品价格,最后修改了总价格

或者如果设置成负数,可能越买余额越多

这种漏洞修复,就是在商品熟练和价格上进行校验
我们怎么想的攻击,就按照攻击的思路想防御,打哪防哪

相关文章:

  • Spring Batch 作业启动方式
  • C++11 异常
  • R6220关于breed刷机,breed-2022-07-24 r1416
  • 【webpack】前端工程化与webpack
  • 基于linux5.15.5的IMX 参考手册 --- 16
  • node\npm问题
  • How to debug LLVM by VS2019 on Windows
  • OkHttp相关知识(三)
  • gplearn原理解析及参数分析
  • leetcode-1210. Minimum Moves to Reach Target with Rotations
  • 基于linux5.15.5的IMX 参考手册 --- 19
  • python入门 之 列表(四)
  • 【微服务】微服务常见面试题
  • MySQL 解析binlog生成标准SQL工具之my2sql
  • 《从0开始学大数据》之知名大厂大数据平台介绍
  • 锐捷(十二)MPLS VXN基础配置实验
  • wpas 关联流程分析
  • MongoDB 正则表达式
  • 微信小程序模块化、组件传值、添加data,menthods类型等记录-持续更新
  • Spring常用注解
  • 电加热油锅炉工作原理_电加热导油
  • 大型电蒸汽锅炉_工业电阻炉
  • 燃气蒸汽锅炉的分类_大连生物质蒸汽锅炉
  • 天津市维修锅炉_锅炉汽化处理方法
  • 蒸汽汽锅炉厂家_延安锅炉厂家
  • 山西热水锅炉厂家_酒店热水 锅炉
  • 蒸汽锅炉生产厂家_燃油蒸汽发生器
  • 燃煤锅炉烧热水_张家口 淘汰取缔燃煤锅炉
  • 生物质锅炉_炉
  • 锅炉天然气_天燃气热风炉