SQL注入类型与技巧

news2024/11/20 8:24:56

目录

一、注入类型

1.联合查询注入

2.报错注入

3.bool注入(布尔盲注)

4.sleep注入(时间盲注)

二、注入技巧

1.科学计数法绕过正则

2.过滤information

3.无列名注入


一、注入类型

1.联合查询注入

MySQL联合查询注入利用union(联合查询)可以同时执行多条SQL语句的特点,在参数中插入恶意的SQL注入语句,同时执行两条SQL语句,获取额外敏感信息或者执行其他数据库操作

有注入点,且数据有回显,那就可以用联合查询注入

-1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3--+

information_schema数据库包含所有的数据库名和表名以及列名,利用这一点进行SQL注入

2.报错注入

报错注入解决的是数据没有回显,但是会返回报错信息的情况

报错注入报错注入的函数有7个,这里演示三个常用的

2.1.floor

floor报错注入,在MySQL中,floor函数与rand()函数、group by子句一起使用时,利用rand()函数可以导致报错注入。

sqllabs这里的第17关对username进行了过滤,输入1'有报错,无回显,但是update语句使用不了updatexml进行报错注入,那就上floor

1' and (select 1 from (select count(*), concat(database(), floor(rand(0)*2))x from information_schema.tables group by x)a)#

2.2.updatexml

利用该函数中第二个参数XPath_string的报错进行注入,有三个参数

2.3.extractvalue

和updatexml一样,也是利用该函数中第二个参数XPath_string的报错进行注入,不过它只有两个参数

1' and extractvalue(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 0,1)))--+

3.bool注入(布尔盲注)

页面没有报错和回显信息,只会返回正常或者不正常的信息,这时候就可以用bool注入

bool注入原理是先将你查询结果的第一个字符转换为ascii码,再与后面的数字比较,如果为真,整个查询条件就为真,返回正常的结果,反之,返回不正常的结果

1' and  ascii(substr((select database()),1,1))>110--+  

盲注如果靠手工的话,是很费时间的,所以我们最好使用工具进行,使用Python脚本或者sqlmap

4.sleep注入(时间盲注)

sleep注入解决的是页面没有任何报错信息输出,不管对或错都是一种返回结果,此时我们就无法使用bool注入了

主要原理和布尔盲注一样,比较大小,如果为真就返回1,为假就沉睡5秒,通过网络请求可以看到请求有多少秒

1' and if(ascii(substr((select database()),1,1)) >120,1,sleep(5))--+

时间盲注,sqlmap跑得也比较慢

二、注入技巧

1.科学计数法绕过正则

正常查询语句被匹配上了,但是我们可以利用这里的\b,一个单词的开头为from,那如果单词开头不是from就可以绕过过滤了

但是如果写其他的字母在from前,mysql会报错,而科学计数法就不会报错,正常查询,只是会多一列数据 

2.过滤information

过滤了information库,我们还可以用下面的库和表来代替(mysql版本大于5.7),但这三个都需要root权限,真实环境中是不太可能给root权限的

sys.x$schema_table_statistics_with_buffer

sys.x$schema_table_statistics

sys.x$ps_schema_table_statistics_io

所以还有不需要root权限的(mysql版本大于5.7),但是这两个表里没有列名,也就是说,用着两个库我们根本查不出来列名

mysql.innodb_table_stats

mysql.innodb_table_index

3.无列名注入

3.1.使用join,using

首先自连接查询出来的表,没有using条件的结果是两张表的笛卡尔积,那么列名必然会有重复的部分,而主键是不允许重复的,所以查询出来会报错,也就把列名爆出来了

-1' union select * from (select * from users as a join users b)c--+

爆出来一个字段后, 使用using()将该字段作为连接两张表的条件,这样这个字段就不会重复了

然后依次这样操作,就可以爆出列名

-1' union select * from (select * from users as a join users b using(id))c--+

3.2.使用数字对应列名查询

上一种方法是查询出列名后再查数据,而这种方法不需要列名,直接查询数据

联合查询后,我们将列名分别赋为了1,2,3

那么我们可以将这张虚拟表作为我们要查询的表,查询所有第二列的数据

这样我们就无需列名,查询出数据了

当反引号被过滤时,我们也可以用别名的方式来代替

还有很多种过滤,比如过滤空格、单引号、函数,但也有很多绕过的方式

最后附上之前自己看书总结的SQL注入绕过方式,不是很全

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

error: ‘std::_hypot‘ has not been declared using std::hypot;

Cmake 使用qt的编译器 编译opencv时 执行mingw32-make时出现了错误 本质原因就是 _hypot 没有声明。所以找到对应的文件声明一下 就行了。 E:\*****\Qt5.14.1\Tools\mingw730_64\lib\gcc\x86_64-w64-mingw32\7.3.0\include\c 下面的math.h 文件。 可以看到这个文件有一个…

8月31日-9月1日 第六章 案例:MySQL主从复制与读写分离(面试重点,必记)

本章结构 案例概述 案例前置知识点 详细图示 1、什么是读写分离? 读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导…

python实现MQTT协议(发布者,订阅者,topic)

python实现MQTT协议 一、简介 1.1 概述 本文章针对物联网MQTT协议完成python实现 1.2 环境 Apache-apollo创建brokerPython实现发布者和订阅者 1.3 内容 MQTT协议架构说明 : 利用仿真服务体会 MQTT协议 针对MQTT协议进行测试 任务1:MQTT协议应…

关于Incapsula reese84加密的特征研究

最近研究了下reese84的加密算法,基本上两个参数的加密__utmvc和token,因为nodejs调用会有内存问题,没有采用补环境的方式解决,用python扣的算法 1:__utmvc参数的生成是一个ob混淆,ast处理之后调试难度不是很大 测试结…

说说IO多路复用

分析&回答 IO多路复用 I/O multiplexing 这里面的 multiplexing 指的其实是在单个线程通过记录跟踪每一个Sock(I/O流)的状态(对应空管塔里面的Fight progress strip槽)来同时管理多个I/O流。直白点说:多路指的是多个socket连接,复用指的是复用一个…

ROS 2官方文档(基于humble版本)学习笔记(二)

ROS 2官方文档(基于humble版本)学习笔记(二) 理解节点(node)ros2 runros2 node list重映射(remap)ros2 node info 理解话题(topic)rqt_graphros2 topic listr…

JVM工具-1. jps 虚拟机进程状态工具

文章目录 1. jps介绍2. jps命令格式3. jps工具主要选项4. jps -q5. jps -m6. jps -l7. jps -v 1. jps介绍 jps(JVM Process Status Tool):虚拟机进程状态工具,可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class&…

【校招VIP】操作系统考点之sleep和wait

考点介绍: 多线程可以说是进阶必备的知识点,也是面试中必备的考点。 可能不少人能对多线程说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打。 操作系统考点之sleep和wait 相关题目及解…

2023-9-1-虚拟网卡学习

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

使用boost::geometry::union_ 合并边界(内、外):方案二

使用boost::geometry::union_ 合并边界&#xff08;内、外&#xff09;&#xff1a;方案二 typedef boost::geometry::model::d2::point_xy<double> boost_point; typedef boost::geometry::model::polygon<boost_point> boost_Polygon;struct Point {float x;floa…

kubernetes进阶 (二) 搭建harbor仓库及镜像制作

我遇到的场景规模较大&#xff0c;F5后有很多个仓库。 并且仓库直接还存在同步关系&#xff0c;因为拉取镜像走的是F5&#xff0c;当碰到莫名其妙的原因(仓库挂了&#xff0c;或者维护、磁盘满了&#xff09;&#xff0c;上送到根仓库的镜像没有同步到其他所以的仓库&#xff0…

高版本springboot3.1配置Eureka客户端问题

只需要按上面配置好&#xff0c;然后高版本的Eureka&#xff0c;不需要EnableEurekaClient这个注解了&#xff0c;直接SpringBoot启动&#xff0c;就可以注册到注册中心。 /*********************************************************/ /** * 开启eureka客户端功能 */ //E…

go锁-互斥锁

go锁-互斥锁 sema初始值是0&#xff0c;waitershift等待协程的数量 正常枷锁&#xff1a; 尝试CAS直接加锁&#xff0c;通过原子包给lockerd 为枷锁 若无法直接获取&#xff0c;进行多次自旋尝试&#xff0c;未获取到的锁的g &#xff0c;多次执行空语句&#xff0c;多次尝试…

indeogram用法

特点&#xff1a; indeogram.ai 是一种基于人工智能的图形设计工具&#xff0c;可以帮助用户快速和轻松地创建专业级的图形。它使用人工智能来识别图形的元素&#xff0c;并自动生成设计方案。这使得 indeogram.ai 非常适合没有任何图形设计经验的用户。 登录网站&#xff1a…

参数和BigDecimal zero比较失效的异常

记录Bigdecimal中参数和BigDecimal zero比较失效的异常 List<StockBatchDTO> b a.stream().filter(v->!v.getQuantity().equals(BigDecimal.ZERO)).collect(Collectors.toList());//失效List<StockBatchDTO> c a.stream().filter(v->v.getQuantity().comp…

高忆管理:股票最基本的知识?

股票是一个经济体中的一份所有权。持有股票的人成为公司的股东&#xff0c;代表他们在公司中有一定的决策权和分红权。股票商场是一个重要的金融商场&#xff0c;关于企业和出资者都具有重要的含义。那么&#xff0c;股票出资的基本知识是什么呢&#xff1f; 一、 股票的界说 …

DEAP库文档教程三-----创建类型

本节将继续展示如何通过creator创建类型以及如何使用toolbox如何对复杂问题进行初始化。 Particle的初始化--粒子初始化 一个Particle是另一个特殊类型的个体&#xff0c;这是因为通常情况下它有一个速度&#xff0c;并且有一个最优的位置需要去记忆。这种类型个体的创建与通…

六、高并发内存池--Central Cache

六、高并发内存池–Central Cache 6.1 Central Cache的工作原理 central cache也是一个哈希桶结构&#xff0c;他的哈希桶的映射关系跟thread cache是一样的。不同的是他的每个哈希桶位置挂是SpanList链表结构&#xff0c;不过每个映射桶下面的span中的大内存块被按映射关系切…

pycharm创建的虚拟环境为什么用conda env list命令查询不到?

问题描述&#xff1a;pycharm创建的虚拟环境为什么用conda env list命令查询不到。 pycharm开发环境可以创建虚拟环境&#xff0c;目的是为隔绝其他环境种库带来的版本干扰&#xff0c;但是发现一个问题&#xff0c;无论是在windows终端、anaconda终端、Pycharm开发环境中的终…

Redis之MoreKey问题及Scan命令解读

目录 MoreKey问题讨论 Scan命令 Sscan命令 Hscan命令 Zscan命令 MoreKey问题讨论 keys * 查看当前库所有key 对于海量数据执行key *会造成严重服务卡顿、影响业务。在实际环境中最好不要使用。生产制造过程中keys * / flushdb/flushall等危险命令以防止误删误用。 大量的…