目录
一、SQL
1.简介
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
结构化查询语言是高级的非过程化编程语言,允许用户在高层数据结构上工作。它不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统, 可以使用相同的结构化查询语言作为数据输入与管理的接口。结构化查询语言语句可以嵌套,这使它具有极大的灵活性和强大的功能。
2.语句结构
参考:sql语句大全(详细)
二、SQL注入
1.概念
SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
2.产生原因
程序开发过程中,由于不重视书写规范,对sql关键字未进行完全过滤,导致客户端可以通过POST或GET提交sql语句到服务器端正常运行
3.SQL注入——注释符
注释符:在Mysql 中常见的注释符表达式:#或–空格或/**/
内联注释:/*!SQL语句 */
只有Mysql可以识别,常用来绕过WAF
例:select * from articles where id = id
使用内联注释注入:
select * from articles where id = -1 /*!union*/ /*!select*/ 1,2,3,4
4.SQL注入——登录案例讲解
登录SQL语句:
select * from admin where username = '用户输入的用户名' and password = '用户输入的密码'
用户输入的内容可由用户自行控制,例如可以输入 ’ or 1=1 --空格
SQL语句:
select * from admin where username = ' ' or 1=1 -- ' and password = '用户输入的密码'
其中or 1=1 永远为真, --注释后边内容不再执行,因此SQL语句执行会返回admin表中的所有内容。
5.SQL注入——SQL注入验证方法
SQL注入验证:
1、单引号 ’
2、 and 1=1
3、 and 1=2
如果页面中Mysql报错,证明该页面存在SQL注入漏洞。
6.Mysql 5.x数据结构
在Mysql 5.0以上的版本中,为了方便管理,默认定义了information_schema数据库,用来存储数据库元信息。其中具有表schemata(数据库名)、tables(表名)、columns(列名或字段名)。
在schemata表中,schema_name字段用来存储数据库名。
在tables表中,table_schema和table_name分别用来存储数据库名和表名。
在columns表中,table_schema(数据库名)、table_name(表名)、column_name(字段名)
利用phpmyadmin for MySQL查看结构
先简单整理一遍,之后会单独开出一篇学习笔记来介绍Mysql数据库。
7. SQL注入——SQL增删改查
show 命令
create 命令
use 命令
select 列名称 from 表名称 where 字段1 = ‘条件1’ and 字段2 = ‘条件2’;
update 表名称 set 列名称 = 新值 where 列名称 = 某值;
insert into table_name (列1, 列2,…) values (值1, 值2,…);
delete from 表名称 where 列名称 = 值;
8.Mysql常见函数
user():查看当前Mysql登录用户名
database():查看当前使用Mysql数据库名
version():查看当前Mysql版本
拓展limit关键字 limit m,n 从m行开始,到m+n行。