WEB安全基础 - - -SQL注入
目录
SQL简介
SQL (Structured Query Language) 是具有数据操纵和数据定义等多种功能的数据库语言,这种语言具有交互性特点,能为用户提供极大的便利,数据库管理系统应充分利用SQL语言提高计算机应用系统的工作质量与效率。SQL语言不仅能独立应用于终端,还可以作为子语言为其他程序设计提供有效助力,该程序应用中,SQL可与其他程序语言一起优化程序功能,进而为用户提供更多更全面的信息。
常见的数据库可有Oracle,MySQL,Access,DB2,PostgreSQL等,不同的数据库也使用不同的sql语句。
Mysql数据库结构
MySQL 由连接池、SQL 接口、解析器、优化器、缓存、存储引擎等组成,可以分为三层,即 MySQL Server 层、存储引擎层和文件系统层。MySQL Server 层又包括连接层和 SQL 层。
SQL语句
SELECT 语句
用于从表中选取数据。结果被存储在一个结果表中(称为结果集)
SELECT 列名 FROM 表名
insert into 语句
用于向表格中插入新的行。
insert into table_name (列 1, 列 2,.....) values( 值 1, 值 2,......)
delete语句
用于删除表中的行。
delete * from 表名称
Update 语句
用于修改表中的数据。
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
Order by 语句
ORDER BY 语句用于根据指定的列对结果集进行排序。ORDER BY 语句默认按照升序对记录进行排序。如果您希望按照降序对记录进行排序,可以使用 DESC 关键字。。
order by 排序列数大于当前查询的列数时就会报错;
Where 语句
SELECT 列名称 FROM 表名称 WHERE 列 运算符 值
更多其他基础命令可以看
MySQL注释符
1. 注释符可以替换空格
2. 内联注入
/*!/*!*/ /* */ 在 mysql 中是多行注释 但是如果里面加了 ! 那么后面的内容会被执行
3. 单行注释符后面加换行也是可以执行的
/**/ # --
SQL注入简介
sql注入原理
Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击,它目前黑客对数据库进行攻击的最常用手段之一。
sql注入危害
数据库信息泄露:数据中存放的用户的隐私信息的泄露; 网页篡改:通过操作数据库对特定网页进行篡改; 数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改; 服务器被远程控制:被安装后门; 删除和修改数据库表信息。
SQL注入判断
根据客户端返回的结果来判断提交的测试语句是否成功被数据库引擎执行,如果测试
语句被执行了,说明存在注入漏洞。
SQL注入的分类
1. 按参数类型分类:
数字型
SQL="selec name from users where id=1"
and逻辑测试: and 1=1 sql 语句: select name from users where id=1 and 1=1 and 1=2 sql 语句: select name from users where id=1 and 1=2 通过比较页面的变化判断输入是否被带入数据库执行
单引号测试: ' sql 语句: select name from users where id=1' 构造 sql 语法错误,来判断输入是否被执行。
字符型
SQL="select name from users where id='1' "
判断方法:id=1',id=1"构造语法错误看是否被执行
搜索型
SQL="select*from users where from name like '%tom' "
1 and 1=1 SQL 查询语句为: select * from users where id like '%1 and 1=1%' 这个输入显然会报错误。 1%'1 and '%1%'' = '%1 SQL 查询语句: select * from users where name like '%tom%' and '%1%' = '%1%' 这里我们用 '% 来闭合 %' ,如果存在漏洞,返回正常信息。
2. 按数据库返回结果分类:
回显注入
在注入点的当前页面中获取返回结果。
代码原理:利用逻辑运算符 or 的运算原理,只要其中一个条件满足为真,则为真, 而 1=1 恒等式恒为真,因此如果上面三个代码输入之后页面显示结果都为正常,则我 们可以判断此页面存在 SQL 注入漏洞
报错注入
SQLServer 中通常错误的查询会返回一些错误信息,在 mysql 中正常情况下是没 有错误信息返回的,但可以通过其他的方式进行错误信息的提取
盲注
基于布尔的盲注 Based boolean
一是无报错信息返回; 二是无论输入是正确还是错误,都只会显示两种情况( 1 或 0 ) (ture 或 false) ; 三是在输入正确时,可通过输入 and 1=1 、 and 1=2 判断。
基于时间的盲注 Based time
基于 Boolean 的盲注可以在页面上看到正确或错误的回显,但是基于 time 的盲注是看不到的。 判断:通过 " 时间 " 条件进行特定的输入,判断后台执行 SQL 语句的时间来判断是否存 在盲注
3. 按注入点位置分类:
GET注入
注入点的位置在 GET 参数部分
POST注入
注入点位置在 POST 数据部分
Cookie注入
注入点存在 Cookie 当中的某个字段
Header注入
注入点在 HTTP 请求头部的某个字段中
相关文章
- 网站被整改报告存在sql注入漏洞如何修复防护
- 使用WebSocket在Server类中无法使用Autowired注解进行自动注入
- java防止sql注入详解编程语言
- SQL与MySQL的异同比较(sql与mysql的区别)
- XSS过滤JAVA过滤器filter 防止常见SQL注入详解编程语言
- Oracle数据库:精通基础SQL(oracle基础sql)
- 在SQL注入中使用DNS获取数据
- MSSQL注入攻击解析:如何保护您的数据库安全?(mssql注入)
- 如何防范SQL注入攻击:MySQL的几种安全策略(sql注入mysql)
- sql与数据服务的桥梁:SQLServerSQLServer:连接SQL与数据服务的桥梁(sqlserver 介于)
- sql 注入MSSQL防止SQL注入:强力防护的关键步骤(mssql阻止)
- 深入浅出:精通Oracle数据库SQL语句(oracle数据库sql语句)
- MySQL中如何筛选不为空的SQL语句(mysql中sql不为空)
- azure sql比较分析AWS MySQL 与 Azure SQL的区别(aws mysql 还是)
- MySQL 处理上下级关系的高效 SQL 查询方法(mysql 上下级sql)
- Oracle数据库如何防范SQL注入(oracle会sql注入)
- 查询Oracle中SQL语句查看显示报表(oracle中sql显示)
- 抢占高薪 Oracle SQL 面试之路(oracle sql面试)
- 解决Oracle SQL遭遇锁死的思路(oracle sql锁死)
- 化分析利用Oracle SQL进行量化分析(oracle sql?量)
- Oracle SQL实现转置-简单快捷(oracle sql转置)
- Oracle SQL解锁数据库的最强利器(oracle sql文)
- 防SQL注入生成参数化的通用分页查询语句
- Sql学习第一天——SQL练习题(建表/sql语句)
- JavaScript中实现依赖注入的思路分享