SQL语法
0x00 information_schema数据库
该库是mysql数据库中记录所有表的信息,为我们提供了各种状态、权限和配置信息等等。
Mysql中的INFORMATION_SCHEMA数据库包含了一些表和视图,提供了访问数据库元数据的方式。
元数据(数据词典、系统目录)是关于数据的数据,如:数据库名或表名,列的数据类型,访问权限等。
说明:
- SCHEMATA:数据库中的信息,一般显示出数据库中的各个数据库及其简要信息
- TABLES:数据库中所有表的信息
- COLUMNS:表的所有列信息
- STATISTICS:表的索引信息
- USER_PRIVILEGES:用户权限信息
- SCHEMA_PRIVILEGES:数据库权限信息
- TABLE_PRIVILEGES:表权限信息
- COLUMN_PRIVILEGES:列权限信息
- CHARACTER_SETS:关于可用字符集信息
- COLLATIONS([kə’leɪʃn] 核对,小吃,这里意思是排序规则):可用字符集的排序信息
- COLLATION_CHARACTER_SET_APPLICABILITY:指明可用与校对的字符集
- TABLE_CONSTRAINTS:描述存在约束的表
- KEY_COLUMN_USAGE([ˈjusɪdʒ]使用;用法;惯例):描述具有约束的键列
- ROUTINES:关于存储子程序的信息,不包含自定义函数
- VIEWS:视图信息
- TRIGGERS:触发器信息
1 |
|
- 不同数据库的sql语句不同
0X01 CURD
插入
1 |
|
删除
1 |
|
修改
1 |
|
查询字符串
- ‘_’为任意单个字符,’%’为任意长度字符,使用LIKE来判断,但是匹配字符串不包含通配符时,可以用‘=’来判断。
1 |
|
- 数据库字符集为ASCII时,一个汉字需要两个’_’,当字符集为GBK时,只需要一个。
e.g.
查询以‘DB_’开头,且倒数第三个字符为i的课程的详细情况。
1 |
|
表的连接
1 |
|
建立索引
1 |
|
给表取别名(用于自身连接等)
1 |
|
聚集函数
1 |
|
- 聚集函数除了COUNT之外,都是跳过空值
- ==WHERE==子句是==不能==用聚集函数作为条件表达式的
- ==聚集函数作为条件表达式时,只能用于SELECT子句和GROUP BY中的HAVING子句==
GROUP BY 子句
将查询结构按一或多列的值分组,值相等为一组
1 |
|
使用变量
1 |
|
用户变量
不用提前声明,直接使用’@变量名‘,如上面“使用变量”代码块
特点:变量和数据库连接有关,在连接中声明的变量,在存储过程中创建了用户变量后一直到数据库断开,变量才消失。该变量不能跨连接
select @name:=team from organize
如果返回多条的@name只保存最后一条记录
需求:
在建立视图较为困难的情况下,选择建立一张新表
新表需要某一个表的一个字段所有情况作为字段,同时当别的表进行CUD时做出相应的变动,某个人的某种类型题目分数相加。
- 说实话这篇博客并不太明白,讲到了动态查询列,问题基本是一样的,但是似乎不是简单的sql变量语句拼接
0x02 授权:授予与收回
GRANT
1
2
3
4GRANT<权限>[,<权限>]...
ON<对象类型><对象名>[,<对象类型><对象名>]...
TO <用户>[,<用户>]... --这里写PUBLIC就是全体用户
[WITH GRANT OPTION]; --是否可以传播当前权限e.g.
1
2
3
4
5
6
7
8GRANT SELECT
ON TABLE billboard.organize
TO user1;
GRANT UPDATE(billboard.organize.team), INSERT, DELETE
ON TABLE billboard.organize
TO user2
WITH GRANT OPTION;
REVOKE
1
2
3REVOKE <权限>[,<权限>]...
ON <对象类型><对象名>[,<对象类型><对象名>]...
FROM <用户> [,<用户>]...[CASCADE|RESTRICT];e.g.
1
2
3
4
5
6
7
8REVOKE UPDATE(Sno)
ON TABLE Student
FROM user4;
REVOKE SELECT, INSERT
ON TABLE SC
FROM USER5
CASCADE;创建数据库模式的权限
CREATE USER
<username>
[WITH][DBA|RESOURCE|CONNECT]
- 只有超级用户才能创建新的数据库用户
- 有三种权限
权限 CREATE USER CREATE SCHEMA CREATE TABLE 登陆数据库,执行查询操作和操纵 DBA :v: :v: :v: :v: RESOURCE :x: :x: :v: :v: CONNECT :x: :x: :x: :v:但必须有相应权限 角色
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17--创建
CREATE ROLE <rolename>
--授权
GRANT <权限>[,<权限>]...
ON <对象类型>对象名
TO <角色>[,<角色>]...
--将一个角色授予其他角色或者用户
GRANT <角色1>[,<角色2>]...
ON <角色3>[,<用户1>]...
[WITH ADMIN OPTIOIN]; --是否可授予别的角色或对象
--角色权限的收回
REVOKE <角色1>[,<角色2>]...
ON <对象类型><对象名>
FROM <角色>[,<角色>]...
T_SQL语法
0x00 表的建立
1 |
|
0x01 表的连接
(如果不使用on直接添加在where处,就是全表生成笛卡儿积,再做处理,这样产生了大量的临时表,性能极低,比较好的方法是比较好的方法是==使用ON关键字先处理好相应的数据源==,再使用WHERE)
1 |
|
0x02 子查询
1 |
|
0x03 EXIXTS 和 NOT EXISTS
(查询到第一个就结束)
0x04 游标
(指向内存中结果集的指针,对内存中的结果集进行操作)
1 |
|
运用
使用FETCH获取记录信息
游标嵌套
查看游标信息
- CURSOR__STATUS
- @@CURSOR_ROWS
- @@FETCH_STATUS
0x05 大对象的导入
- BULK INSERT
1 |
|
0x06 索引
利用SQL Server图形工具进行创建
利用CREATE INDEX 命令创建索引
1
2
3
4
5
6
7
8CREATEE [UNIQUE|CLUSTERED|NONCLUSTERED]
INDEX index_name
ON
{table_or_view_name}
(column[ASC|DESC][,.......n])
[INCLUDE(column_namme[,.......n])]
[ON{filegroup_name|default}]
[; ]利用ALTER INDEX命令修改索引
1
2
3
4
5
6
7ALTER INDEX {index_name | ALL}
ON <table_or_view_name>
{REBUILD
[[WITH ( <rebuild_index_option>[,...n])]]
| DISABLE
| REORGANIZE
} [;]索引碎片检测
索引重组
0x07 事务
0x08 触发器
0x09 锁
SQL 注入
0x00 mysql CLI基本操作
1 |
|
0x01 mysql基本查询
1 |
|
- 小贴士:当数据库使用union查询时,如果union前的数据不存在,那么就会只返回union后的数据,这样就可以显示我们想要看到的数据
0x02 基本注入
思路:通过简单地闭合字符串来构造sql语句。
常见闭合情况:单引号、双引号、括号(以及这几种的组合),还有可能直接采用数字(不用闭合)
结合information_schema使用union查询自己想要的数据
注释方式#, –%20, –, –+
0x03 盲注
没有回显的注入
- bool
1 |
|
- 时间
1 |
|
- 报错
1 |
|
基于报错的盲注主要就是三块:
- 普通查询语句中的
count(*)
- 分组语句
group by
后连接函数concat
内部floor(rand(0) * 2)
,这里的形式不定,只要满足用其来分组就行 - 分组语句
group by
后连接函数concat
,你想要通过报错查询的信息,比如:database()
- 合并之后就是
select count(*) from YOUR_SCHEMA.YOUR_TABLE group by concat(@@version, floor(rand(0)*2);
- 当然可以在上式基础上更改成更多变式,比如子查询(表被限制)、使用局部变量(rand被限制)
函数集合
0x00 Mysql
截取字符串
- mid(str, start, length)
- substr(str, start, length) substring(str, start, length)
- left(string, length)
- ord()该函数可以和上述几个组合将单个字符(若为字符串则转换最左边的的字符)转为ascii
正则
regexp(暂用于盲注)
1 |
|
0x01 Mssql
伪正则
1 |
|
TIPS
- 数据查询优化,很重要的一部分
- bool型盲注
思筛
- start:基本的注入就是对于网站输入以及回显情况来使用不同的sql函数,前提是有注入点,这里如果要提高就要熟悉sql函数及它的用法,有思路了再去查。
- 说到根本上还是思维的问题,思维层面上提升了,一切都会有新的高度,系统思维,搜搜这本书。
待分配
- 约束攻击
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!