SQL注入(数据库基础)

1、数据库基础

1.1 数据库识别

数据库默认端口号
Oracle1521
MySQL3306
SQL Server1433
PostgreSQL(国内不常见)5432
mongoDB27017
Redis6379
MemcacheDB11211

1.2 数据库版本查询

数据库方法/语句
MSSQLselect @@version
MySQLselect version() / select @@version
Oracleselect banner from v$version
PostgresQLselect version()

1.3 数据库字符串处理

字符串中的字符索引是从 1 开始的

MS SQL:

1、长度
len('abc') #3

2、截取左右
left('abc',2) #'ab'
right('abc',2) #'bc'

3、截取中间
substring('abc',2,1) #'b'

4、字符串连接
" + "

MySQL:

1、长度
length('abc'); #3

2、截取左右
left('abc',2); #ab
right ('abc'.2); #bc

3、截取中间
substring('abc',2,1); #b
mid('abc',2,1); #b

4、字符串连接
concat(" "," ");

Oracle:

1、长度
length('abc'); #3

2、截取左右
substr('abc',1,1); #a
substr('abc',3,1); #c

3、截取中间
substr('abc',2,1); #b

4、字符串连接
' ' || ' '

1.4 数据库高级操作

SQL高级操作:排序、分组、限定条数

排序 order by

SELECT * FROM test_table ORDER BY userid asc;#从小到大排序(默认)
SELECT * FROM test_table ORDER BY userid desc;#从大到小排序
SELECT * FROM test_table ORDER BY 1;#通过第一列从小到大排序

排序还可通过数字1,2……来代表第一列,第二列……来进行排序

分组 group by

SELECT name,COUNT(*) FROM test_table GROUP BY name;

执行顺序是先查询后分组

限定条数 limit

SELECT * FROM test_table limit 0,10; #表示从索引0开始查询十条记录
SELECT * FROM test_table limit 1,5; #表示从索引1开始查询五条记录

在使用limit时,其数据的索引是从0开始的,而不是字符串处理中的索引从1开始

联合查询 union select

SELECT * FROM test_table1 UNION SELECT * FROM test_table2;
SELECT * FROM test_table1 UNION ALL SELECT * FROM test_table2;
SELECT * FROM test_table UNION SELECT 1,2,3;

使用联合查询时需注意,查询两张表的列数必须得一致,不然该命令会报错。

当查询语句同时出现了where,group by,having,order by的时候,执行顺序和编写顺序是:

  1. 执行where xx对全表数据做筛选,返回第一个结果集
  2. 针对第一个结果集使用group by分组,返回第二个结果集
  3. 针对第二个结果集中的每一组数据执行select xx,有几组就执行几次,返回第三个结果集
  4. 针对第三个结果集执行having xx进行筛选,返回第四个结果集
  5. 针对第四个结果集排序

1.5 杂项

1、查看数据库编码

show variables like “%character%”;

1.6 内置数据库information_schema

information_schema 信息数据库,它保存着关于 MySQL 服务器所维护的所有其他数据库的信息,在SQL注入中主要用到一下三个表:

1.6.1 SCHEMATA 表

提供了当前 MySQL 实例中所有数据库的信息。show databases命令的结果就是取此表信息

常用参数:

  • SCHEMA_NAME:存储的是数据库名称

1.6.2 TABLES 表

存储数据库中的表信息(包括视图),包括表属于哪个数据库,表的类型、存储引擎、创建时间等信息。SHOW TABLES FROM TABLE1 命令从此表获取结果

常用参数:

  • TABLE_SCHEMA:存储的是所属数据库名称
  • TABLE_NAME:存储的是表名称

1.6.3 COLUMNS 表

存储表中的列信息,包括表有多少列、每个列的类型等。SHOW COLUMNS FROM schemaname.tablename; 命令从此表获取结果

常用参数:

  • TABLE_SCHEMA:存储的是所属数据库名称
  • TABLE_NAME:存储的是所属表名称
  • COLNMNNAME:存储的是列名称
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魏大橙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值