SQL注入(一)数据库基础操作

版权声明:本文为原创文章,未经作者允许不得任何个人、组织、机构以任何形式与名义进行转载 https://blog.csdn.net/qq_23217779/article/details/88554545

数据库接口语言
开放式数据接口(ODBC)
JAVA数据库连接(JDBC)
可扩展标记语言(XML)
对象链接与嵌入数据库(OLEDB)
ActiceX数据对象(ADO)


数据定义(Create、Drop)
数据操纵(Select、Insert、Update、Delete)
数据控制(Grant、Revoke)


数据库版本查询
Mssql: select @@ version
MySQL: select version() / select @@version
Oracle: select banner fron $version
Postgresql:select version()


常见搭配
ASP/.NET Microsoft SQL Server
PHP MySQL PostgreSQL
Java Oracle MySQL


排序

SELECT * FROM test_table ORDER BY userid;

分组

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

限定条数

SELECT * FROM test_table limit 0,10;
SELECT * FROM test_table limit 1,5;

组合使用

SELECT * FROM test_table LIMIT 0,5 ORDER BY userid;

Order by :用来确定字段数

Select * from test ORDER BY username DESC;
?id=1 order by 5  //当order by 后跟着的数字超过字段数的时候会报错

Limit用法

Select * from table limit m,n

其中m是指记录开始的index,从0开始,标识第一条记录 n是指从第m+1条开始,取n条

两个参数:第一个是偏移量,第二个是数目

Select * from employee limit 3,7; //返回第4-11行
Select * from employee limit 3,1; //返回第4行

一个参数:

Select * from employee limit 3;

Group By 用法
根据(by)一定的规则进行分组(group)
通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理
Group by 是先排序后分组 必须有聚合函数sum() count() avg()来配合使用
ex:

Select * from offices;     select * from offices group by city;

错误查询语句:

Select product,price from orders group by product

正确查询语句:

Select product,sum(price) from orders GROUP BY product

当查询语句同时出现了where,group by,having,order by的时候,执行和编写顺序是:
1. 执行where xxx 对全表数据进行筛选,返回第一个结果集
2. 针对第一个结果集使用group by 分组,返回第二个结果集
3. 针对第二个结果集中的每一组数据执行 select xxx 有几组就执行几次,返回第三个结果集
4. 针对第三个集结 having xxx进行筛选,返回第四个结果集
5. 针对第四个结果进行排序

Union联合查询
因为查询语句构造问题,可直接否认掉之前的查询,执行一个新的查询语句,需要注意的是查询的列应当和之前的对应
用and union select 1,2,3,4,5…来猜解列数(字段数),只有列数相等了,才能返回true

select * from test where id=3 and 1=2 union select 0,0,name from test;

结合其他函数
结合exists()函数猜解表名 and exists(select …)
Ex:

Select * from offices where city="china" and exists(select * from offices_second);

Union 结合系统函数暴露数据库信息
在MySQL中,把information_schema看做是一个数据库,其中保存着关于MySQL服务器所维护的所有其他数据库的信息,比如数据库名,数据库的表,表栏的数据类型与访问权限等
Information_schema数据库是MySQL自带的

Information_schema.SCHEMATA表中的SCHEMA_NAME查看所有的数据库

Select * from hehe where id=3 and 1=2 union select 0,0,SCHEMA_NAME from information_schema.SCHEMATA limit 1,2;

Information_schema.TABLES 表中的TABLE_NAME和TABLE_SCHEMA查看所有的表名和所在的数据库
Select TABLE_NAME , TABLE_SCHEMA from information_schema.TABLES where TABLE_SCHEMA = "HAHA"

结合load_file()读取服务器文件的内容
Load_file(file_name):读取文件并将文件内容按照字符串的形式返回
在MYSQL中可在UNION里充当一个字段,读取web服务器的文件
前提:
文件的位置必须在服务器上,必须设置文件的绝对路径,必须拥有FILE特许权
文件必须可读取,容量必须小于max_allowed_packet字节
若文件不存在,或因不满足上述条件而不能被读取,则函数返回值为null

Ex:
	Select * from offices where officeCode=7 and 1=2 union select 0,0,0,load_file("c:/test.txt") from offices;

猜你喜欢

转载自blog.csdn.net/qq_23217779/article/details/88554545
今日推荐