最新宽字节注入攻击和代码分析技术

news2024/11/28 22:46:59

点击星标,即时接收最新推文

4abc964960d7586e035fc4da47d7dfbb.png

本文选自《web安全攻防渗透测试实战指南(第2版)》

点击图片五折购书

06ad999c7f6842e86d156588bf606a67.gif

宽字节注入攻击

宽字节注入攻击的测试地址在本书第2章。

访问id=1',页面的返回结果如图4-51所示,程序并没有报错,反而多了一个转义符(反斜杠)。

63eea8142921a154a5ccef69a6e037db.jpeg

图4-51  

从返回的结果可以看出,参数id=1在数据库查询时是被单引号包围的。当传入id=1'时,传入的单引号又被转义符(反斜杠)转义,导致参数ID无法逃出单引号的包围,所以一般情况下,此处是不存在SQL注入漏洞的。不过有一个特例,就是当数据库的编码为GBK时,可以使用宽字节注入。宽字节的格式是在地址后先加一个%df,再加单引号,因为反斜杠的编码为%5c,而在GBK编码中,%df%5c是繁体字“連”,所以这时,单引号成功“逃逸”,报出MySQL数据库的错误,如图4-52所示。

557395f902ec37e34a6f71f7d7ff4310.jpeg

图4-52  

由于输入的参数id=1',导致SQL语句多了一个单引号,所以需要使用注释符来注释程序自身的单引号。访问id=1%df'%23,页面返回的结果如图4-53所示,可以看到,SQL语句已经符合语法规范。

fd719d94d22516092a0046c5dc97884b.jpeg

图4-53  

使用and 1=1和and 1=2进一步判断注入,访问id=1%df' and 1=1%23和id=1%df' and 1=2%23,返回结果分别如图4-54和图4-55所示。

d790ba937f59f3e76f554930dec58037.jpeg

图4-54  

d8667f702477c7b2d98b45b55d76c320.jpeg

图4-55  

当and 1=1程序返回正常时,and 1=2程序返回错误,判断该参数ID存在SQL注入漏洞,接着使用order by查询数据库表的字段数量,最后得知字段数为5,如图4-56所示。

31bb265174b336e4fecd3f9355dfdd8f.jpeg

图4-56  

因为页面直接显示了数据库中的内容,所以可以使用Union查询。与Union注入一样,此时的Union语句是union select 1,2,3,4,5,为了让页面返回Union查询的结果,需要把ID的值改为负数,结果如图4-57所示。

b34606fc234cea20f8ce432b236a085d.jpeg

图4-57  

然后尝试在页面中2的位置查询当前数据库的库名(user()),语句如下:

id=-1%df' union select 1,user(),3,4,5%23

返回的结果如图4-58所示。

00b6c087cdfadf37f66bbbc1314e46ba.jpeg

图4-58  

查询数据库的表名时,一般使用以下语句:

select table_name from information_schema.tables where table_schema='test' limit 0,1

此时,由于单引号被转义,会自动多出反斜杠,导致SQL语句出错,所以此处需要利用另一种方法:嵌套查询。就是在一个查询语句中,再添加一个查询语句,更改后的查询数据库表名的语句如下:

select table_name from information_schema.tables where table_schema=(select database()) limit 0,1

可以看到,原本的table_schema='test'变成了table_schema=(select database()),因为select database()的结果就是'test',这就是嵌套查询,结果如图4-59所示。

6f32615a340e78733b759f8524da8c8b.jpeg

图4-59 

从返回结果可以看到,数据库的第一个表名是users,如果想查询后面的表名,则需要修改limit后的数字,这里不再重复。使用以下语句尝试查询users表里的字段:

select column_name from information_schema.columns where table_schema=(select database()) and table_name=(select table_name from information_schema.tables where table_schema=(select database()) limit 0,1) limit 0,1

这里使用了三层嵌套,第一层是table_schema,它代表库名的嵌套,第二层和第三层是table_name的嵌套。可以看到,语句中有两个limit,前一个limit控制表名的顺序,后一个limit则控制字段名的顺序。如果这里查询的不是emails表,而是users表,则需要更改limit的值。如图4-60所示,后面的操作与Union注入相同,这里不再重复。

31b691efa1a79cac6e7e2383a04be967.jpeg

图4-60

e85ff9608af334a055fdd0510ebc5d47.gif

宽字节注入代码分析

在宽字节注入页面中,程序获取GET参数ID,并对参数ID使用addslashes()转义,然后拼接到SQL语句中,进行查询,代码如下:

<?php
    $con=mysqli_connect("localhost","root","123456","test");
    if (mysqli_connect_errno())
    {
    echo "连接失败: " . mysqli_connect_error();
    }
    mysqli_query($con, "SET NAMES 'gbk'");




    $id = addslashes($_GET['id']);
    $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
    $result = mysqli_query($con, $sql) or die(mysqli_error($con)); 
    $row = mysqli_fetch_array($result);




if($row){
       echo $row['username']. " : " . $row['address'];
   }else {
    print_r(mysqli_error($con));
}      
    
    echo "<br>The Query String is : ".$sql ."<br>";
?>

当访问id=1'时,执行的SQL语句如下:

SELECT * FROM users WHERE id='1\''

可以看到,单引号被转义符“\”转义,所以在一般情况下,是无法注入的。由于在数据库查询前执行了SET NAMES 'GBK',将数据库编码设置为宽字节GBK,所以此处存在宽字节注入漏洞。

在PHP中,通过iconv()进行编码转换时,也可能存在宽字符注入漏洞。

949461abbdf02703e4534636f06916de.gif

MS08067安全实验室视频号已上线

欢迎各位同学关注转发~

—  实验室旗下直播培训课程  —

825f5705838ce8e6d892be548365c1da.png

38d4c2ec44bcc6d8534f43409c32c2ca.jpeg

9ede5cc8cea583474440f44ca4b5562d.jpeg86b942c7346ec0de3f72997975f8883c.png

057f910a515ba82db816a10f36d3d961.jpeg

ff799457df88cc0c8063e42d21a59026.jpeg

e966909335fef586fff29843a9dabf84.jpeg

72497444298c1a5f0e21322c8b82a080.jpeg

f8fd1adfe3773bc6679eaf1c960ebdde.jpeg


和20000+位同学加入MS08067一起学习

b289df03c29f870b2d68dbdd24e50c79.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1055459.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于树莓派CM4制作img系统镜像批量制作TF卡

文章目录 前言1. 环境与工具2. 制作镜像3. 烧录镜像4. 总结 前言 树莓派烧录完系统做定制化配置比较费时间。在面对大批量的树莓派要配置&#xff0c;那时间成本是非常巨大的。第一次配置完可以说是摸着石头过河&#xff0c;但是会弄了以后再配置&#xff0c;都是一些重复性操…

Canal实现数据同步

1、Canal实现数据同步 canal可以用来监控数据库数据的变化&#xff0c;从而获得新增数据&#xff0c;或者修改的数据。 1.1 Canal工作原理 原理相对比较简单&#xff1a; 1、canal模拟mysql slave的交互协议&#xff0c;伪装自己为mysql slave&#xff0c;向mysql master发送…

零代码编程:用ChatGPT将特定文件标题重命名为特定格式

一个文件夹里面是同一系列文件&#xff0c;但是有两种命名方法&#xff0c;现在想把文件标题格式统一。 在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量重命名的任务&#xff0c;具体步骤如下&#xff1a; 打开本地电脑文件夹&#xf…

38 翻转二叉树

翻转二叉树 理解题意&#xff0c;翻转即每个结点的左右子树翻转/对调题解1 递归——自下而上题解2 迭代——自上而下 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 提示&#xff1a; 树中节点数目范围在 [0, 100] 内-100 < Node.…

树莓派CM4开启I2C与UART串口登录同时serial0映射到ttyS0 开启多串口

文章目录 前言1. 树莓派开启I2C与UART串口登录2. 开启多串口总结&#xff1a; 前言 最近用CM4的时候使用到了I2C以及多个UART的情况。 同时配置端口映射也存在部分问题。 这里集中记录一下。 1. 树莓派开启I2C与UART串口登录 输入指令sudo raspi-config 跳转到如下界面&#…

机器人过程自动化(RPA)入门 9. 管理和维护代码

仅仅创建一个自动化项目是不够的。无论是决定使用哪种布局,还是正确命名步骤,以正确的方式组织项目都很重要。项目也可以在新的项目中重用,这对用户来说非常方便。本章解释了我们可以重用项目的方法。我们还将学习配置技术并看到一个示例。最后,我们将学习如何集成TFS服务器…

第十二章 类和对象——封装

C面向对象的三大特性为&#xff1a;封装、继承、多态 C认为万事万物都皆为对象&#xff0c;对象上有其属性和行为 例如&#xff1a; 人可以作为对象&#xff0c;属性有姓名、年龄、身高、体重...&#xff0c;行为有走、跑、跳、吃饭、唱歌... 车也可以作为对象&#xff0c;…

89、Redis 的 value 所支持的数据类型(String、List、Set、Zset、Hash)---->Zset 相关命令

本次讲解要点&#xff1a; ** Set相关命令&#xff1a;是指value中的数据类型** 启动redis服务器&#xff1a; 打开小黑窗&#xff1a; C:\Users\JH>e: E:>cd E:\install\Redis6.0\Redis-x64-6.0.14\bin E:\install\Redis6.0\Redis-x64-6.0.14\bin>redis-server.exe …

Android-Q 对 startActivity() 做了限制,怎么适配?

一. Q 禁用后台启动 Activity 今天来聊聊“Android Q 中后台禁止启动 Activity 对现有国内 App 中启动页设计的影响”这个话题&#xff0c;再聊聊 Android Q 限制后台启动 Activity 的具体细节。 有人可能会觉得 P 还没用上&#xff0c;Q 还远着。如果只是对于普通用户来说&a…

为什么要使用虚拟机?VMware安装使用

前言 大家好&#xff0c;本文是讲述了为什么需要使用虚拟机、使用虚拟机的好处&#xff0c;以及如何在Windows系统中安装VMware。希望对大家有所帮助~ 目录 前言一、为什么要安装使用虚拟机&#xff1f;1.1、什么是虚拟机&#xff1f;1.2、虚拟机的核心组件1.3、使用虚拟机的好…

【RabbitMQ】常用消息模型详解

文章目录 AMQP协议的回顾RabbitMQ支持的消息模型第一种模型(直连)开发生产者开发消费者生产者、消费者开发优化API参数细节 第二种模型(work quene)开发生产者开发消费者消息自动确认机制 第三种模型(fanout)开发生产者开发消费者 第四种模型(Routing)开发生产者开发消费者 第五…

网络-fetch

文章目录 前言一、fetch简介优点&#xff1a;缺点&#xff1a; 二、使用getpost进度实现取消请求超时实现 总结 前言 本文主要记录浏览器与服务端网络通讯 fetch 的介绍与使用&#xff0c;将完成get、post、进度、取消请求、和超时请求的功能实现。 一、fetch简介 fetch作为继…

基于自适应启动策略的混合交叉动态约束多目标优化算法(MC-DCMOEA)求解CEC2015/CEC2018/CEC2023(MATLAB代码)

一、动态多目标优化问题 1.1问题定义 1.2 动态支配关系定义 二、 基于自适应启动策略的混合交叉动态多目标优化算法 基于自适应启动策略的混合交叉动态多目标优化算法&#xff08;Mixture Crossover Dynamic Constrained Multi-objective Evolutionary Algorithm Based on Se…

深度学习(1)---卷积神经网络(CNN)

文章目录 一、发展历史1.1 CNN简要说明1.2 猫的视觉实验1.3 新认知机1.4 LeNet-51.5 AlexNet 二、卷积层2.1 图像识别特点2.2 卷积运算2.3 卷积核2.4 填充和步长2.5 卷积计算公式2.6 多通道卷积 三、池化层 一、发展历史 1.1 CNN简要说明 1. 卷积神经网络&#xff08;Convolut…

【51单片机编写占空比按秒渐亮与渐暗】2023-10-2

昨天刚在W10上安装CH340驱动&#xff0c;又下载到板子上LCD1602定时器时钟程序&#xff0c;为了调试&#xff0c;调用了一个LED观察控制蜂鸣器按秒响的变量&#xff0c;几经调试才发觉该开发板用的是有源蜂鸣器&#xff0c;不用IO取反操作&#xff0c;直接控制IO的高低电平即可…

手机号码格式校验:@Phone(自定义参数校验注解)

需求 新增接口 和 修改接口 中&#xff0c;手机号码的格式校验是普遍需要的。 在每个手机号码字段上添加正则表达式校验注解来实现校验&#xff0c;重复书写&#xff0c;容易出错&#xff1b;在不同的手机号码字段上&#xff0c;可能使用了不同的校验规则&#xff0c;无法有效…

2023年9月文章一览

2023年9月编程人总共更新了4篇文章&#xff1a; 1.2023年8月文章一览 2.Programming abstractions in C阅读笔记&#xff1a;p144-p160 3.Programming abstractions in C阅读笔记&#xff1a;p161-p165 4.我为什么选择这样一份经常出差的工作 9月份大部分时间在出差&#…

【论文阅读】Prototypical Networks for Few-shot Learning

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、论文摘要方法 二、视频总结 前言 本文结合论文和youtube上的视频[Few-shot learning][2.2] Prototypical Networks: intuition, algorithm, pytorch code来…

Spring Boot中的@Controller使用教程

一 Controller使用方法&#xff0c;如下所示&#xff1a; Controller是SpringBoot里最基本的组件&#xff0c;他的作用是把用户提交来的请求通过对URL的匹配&#xff0c;分配个不同的接收器&#xff0c;再进行处理&#xff0c;然后向用户返回结果。下面通过本文给大家介绍Spr…