前言
SQL注入稳居owasp top10,可见其危害之大,今天与大家分享一下自己对sql注入的见解。
一、sql注入是什么?
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
SQL注入的原理: a.参数用户可控:前段传给后端的参数内容是用户可以控制的。
b.参数代入数据库查询:传入的参数拼接到SQL语句且带入数据库查询。
二、sql注入相关知识点
1.在mysql5.0版本之后,mysql默认在数据库中自带名为“information_schema”的数据库,在该库中有三个表名分别为SCHEMATA、TABLES和COLUMNS
2.SCHEMATA 表存储的是该用户创建的所有数据库的库名,我们需要记住该表中记录数据库名的字段名为 SCHEMATA _NAME
3.TABLES 表存储该用户创建的所有数据库的库名和表名,我们需要记住该表中记录数据库库名和表名的字段分别是 TABLE_SCHEMA 和 TABLE_NAME。
4. COLUMNS表存储该用户创建的所有数据库的库名、表名、字段名,要记住该表中记录数据库库名、表名、字段名为 TABLE_SCHEMA、TABLE_NAME、COLUMN_NAME。
5. group_concat(table_name):查询所有表。
6. database():当前网站使用的数据库。
7. version():当前MYSQL的版本。
8. user():当前MYSQL的用户。
9. 注释符: 常见的表达方式有:#或–空格(–+)或/**/
10.limit用法:limit m,n 其中m是指记录开始的位置,从0开始,表示第一条记录;n是指取n条记录。
三、MYSQL查询语句
select 要查询的字段名 from 库名,表名 where 已知条件的字段名=‘已知条件的值’
查询指定数据库下的表名信息:select group_concat(table_name) from information_schema.tables where table_schema=‘数据库名’
查询指定表下的列名信息:select group_concat(column_name) from information_schema.columns where table_name='表名'
查询指定数据:select group_concat(username,password) from ’列名‘
四、MYSQL注入分类
1.从反馈结果来分 :有/无(盲注)回显
2.从攻击手法上来分:a.联合查询注入 union select
b.堆叠注入
c.报错注入 updatexml、floor、ExtractValue、exp等
d.盲注(布尔、时间)
五、SQL注入防御
代码层防御:1.对用户输入的内容进行转义
2.限制关键字输入
3.预编译
网络层面:部署防护墙和软硬WAF
总结
以上就是本次分享给大家的内容啦,至于实战内容我们下期不见不散!小白有许多不足之处,还请各位大佬斧正!