学习笔记-SQL注入(数据库基础)

 SQL语法基础

  用于与关系型数据库交互的标准SQL命令有

  CREATE(创建数据库),SELECT(查),INSERT(增),UPDATE(改),DELETE(删),DROP(删除表)

  数据控制:Grant(给用户赋予某张表的权限)Revoke(收回赋予用户的特权)

注意:SQL命令对大小写不敏感;所有命令基本都以分号结束;

  例如:

create table result (id int(10),name varchar(20),city varchar(20),score int(10) ;      //表名:result,四个字段:id,name,city,score 并且指定了数据类型。
insert into result(id,name,city,score) values(1,'zhao','xian','99');    //注意:如果是字符串需要用单引号包裹起来
delete from result where id=1;    //删除操作
update  result set score=100 where id=1;    //修改数据

 SQL高级操作:排序,分组,限定条件

  排序 order by

SELECT*FROM result ORDER BY score;  //升序:默认由低到高排序;字符串由字母表来排序;
SELECT*FROM result ORDER BY score desc;  //降序
select*from result order by 1  //第一列排序(id)   注意:order by 当后面跟着的数字超出字段数时,就会报错。通过这个可以确定字段数!

  分组 group by(group by 是先排序后分组;必须有sum(),count(),avg()配合使用)

select city,sum(score) from result group by city;  //查询不同城市考试成绩之和

 

  限定条数 limit

SELECT*FROM result limit 0,1;  //从0行开始,顺序向下显示1行
SELECT*FROM result limit 2,2;  //从2行开始,顺序向下显示2行
SELECT*FROM result limit 3;  //返回前三行
//注意:id=1行为第0行

  联合查询 union select(也可以结合exists()函数猜表名 and exists(select*...))

SELECT id,city from result UNION SELECT name,score from result;  //假如已知字段名,不知字段值,可以将字段名放到已知可以显示字段值的字段名下,就可以将字段值打印出来
//id,city 为可以显示字段值的字段名;name,score为只知字段名不知字段值  注意:字段名数量一定要相等

  结合其他函数

  union select 结合系统函数暴露库信息(MySQL5.5以上版本自带information_schema数据库,里面保存着其他所有的数据库信息)

select schema_name from information_schema.schemata;    //所有数据库的库名
select table_name from information_schema.tables where table_schema='student';    //student中的表名
select column_name from information_schema.columns where table_schema='student' and table_name='result';    //查询student数据库中result表内的字段名

  结合load_file()读取服务器文件内容

  注意:文件位置要在服务器上,必须为文件路径全名,MySQL配置文件中,secure_file_priv不能为NULL

     文件必须可读,文件容量必须小于max_allowed_packet字节(服务器的默认max_allowed_packet值为1MB)

select id,name,city from result union select  score,losd_file('...'),1 from result;

 

  

    

posted @ 2022-09-25 17:08  彩凤898  阅读(101)  评论(0编辑  收藏  举报