SQL注入

学习目标:

SQL注入

学习内容:

1.了解SQL注入

2.SQL注入过程

3.联合查询

学习时间:

2021年2月5日

学习产出:

1.了解SQL注入

1.1SQL注入定义
SQL是操作数据库数据的结构化查询语言,网页的应用数据和后台数据库中的数据进行交互时会采用SQL。而SQL注入是将Web页面的原URL、表单域或数据包输入的参数,修改拼接成SQL语句,传递给Web服务器,进而传给数据库服务器以执行数据库命令。如Web应用程序的开发人员对用户所输入的数据或cookie等内容不进行过滤或验证(即存在注入点)就直接传输给数据库,就可能导致拼接的SQL被执行,获取对数据库的信息以及提权,发生SQL注入攻击。

1.2SQL注入原理
SQL注入攻击指的是通过构建特殊的输入作为参数传入Web应用程序,而这些输入大都是SQL语法里的一些组合,通过执行SQL语句进而执行攻击者所要的操作,其主要原因是程序没有细致地过滤用户输入的数据,致使非法数据侵入系统。

2.SQL注入过程

2.1.SQL注释风格

“#”: 注释从 “#” 到行尾
"-- " :注释从 “-- ”序列到行位,需要注意的是使用此注释时,后面需要跟上空格
/**/:注释从 /* 到 */ 之间的字符

2.2获取元数据
① 查询用户数据库名称

SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA

INFORMATION_SCHEMA.SCHEMATA 表提供了关于数据库的信息。(nformation_schema数据库的SCHEMATA表的SCHEMA_NAME字段保存的是所有的数据库的名:)
SQL注入
②查询当前数据表
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = (SELECT DATABASE())

INFORMATION_SCHEMA.TABLES 表给出了数据库中表的信息。
SQL注入
③查询指定表的所有字段
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '*

INFORMATION_SCHEMA.COLUMNS 表中给出了表中的列信息。SQL注入

3.联合查询

1. 联合查询(去重)。
用于合并两个或多个 SELECT 语句的结果集。UNION 内部的每个 SELECT 语句必须拥有相同数量和相同顺序的列,列也必须拥有相似的数据类型。SQL语法如下:

SQL注入

注:UNION查询的结果中,不存在重复的值。

2. SQL联合查询(内联、左联、右联、全联)的语法
联合查询效率较高,举例子来说明联合查询:内联inner join 、左联left outer join 、右联right outer join 、全联full outer join 的好处及用法。
SQL注入

第一:内联(inner join)
把两个表中都存在userid的行拼成一行(即内联)
SQL语句:select * from T1 inner join T2 on T1.userid=T2.userid

SQL注入

第二:左联(left outer join)
显示左表T1中的所有行,并把右表T2中符合条件加到左表T1中;右表T2中不符合条件,就不用加入结果表中,并且NULL表示。

SQL语句:select * from T1 left outer join T2 on T1.userid=T2.userid
SQL注入
第三:右联(right outer join)
显示右表T2中的所有行,并把左表T1中符合条件加到右表T2中;左表T1中不符合条件,就不用加入结果表中,并且NULL表示。

SQL语句:select * from T1 right outer join T2 on T1.userid=T2.userid
SQL注入
第四:全联(full outer join)
显示左表T1、右表T2两边中的所有行,即把左联结果表+右联结果表组合在一起,然后过滤掉重复的。

SQL语句:select * from T1 full outer join T2 on T1.userid=T2.userid

SQL注入

参考:https://www.cnblogs.com/IronMind/p/13414827.html

上一篇:SQLite


下一篇:Java Day1