目录
一、数据库基础
-数据库结构:数据库 test--->表 user--->字段 username--->字段值 admin
-数据库基础命令:
-查询数据库:show databases;
-进入数据库:use sqlpeixun;
-查看数据库中的表:show TABLES;
-查询表字段值:SELECT * from person;
-表插入数据: insert into person(id, name, age, phone, address)
values (1,'yang',22,'123232323', 'shanghai');
insert into person values (6,'2zhangsan',99,'66666666', 'hefei');
-表数据值删除:delete from person_2 where id = 4; 删除id为4的
delete from person_2; 删除当前表内容
-表数据值修改:update person set address='hangzhou';
update person set address='shanghai' where id = 1;
-where子句:
>,<,=,!=,&&,||
SELECT * from person where NAME='yang' && age=23;
-LIKE子句:
百分号 %:匹配任意多个字符
SELECT * from person where NAME like '%an';
下划线 _:匹配固定一个字符
SELECT * from person where NAME like '_an';
-IN 子句
它限制的是一个集合
SELECT * from person where address in ('hangzhou'); 满足address为hangzhou
SELECT * from person where address not in ('hangzhou'); 不满足
ORDER BY 子句
查询列值
ASC 默认升序
DESC 降序排列
select * from person order by id desc;
判断列数
满足查询的列数时正常输出,当列数不满足时直接报错。
select * from person ORDER BY 6;
GROUP BY 子句
查询返回的结果集进行一个分组
SELECT address,name from person group by address,name; 查询字段决定排序
UNION 联合查询
UNION的结果集列名与UNION运算符中第一个Select语句的结果集的列名相同。另一个Select语句的结果集列名将被忽略。
union union all
比如select 'a' union select 'a' 输出就是一行 a
比如select 'a' union all select 'a' 输出就是两行 a
二、SQL注入原理
1、SQL注入:SQL代码带入数据库中执行--->通过动态参数传递。
www.***.com.cn/home.php?uid=1
select * from test where uid=1
www.***.com.cn/home.php?uid=1 or 1=1
select * from test where uid=1 or 1=1
or 只要有一个条件为‘真’时,结果为真。
-注入形成条件:
用户能够控制数据的输入
原本要执行的代码,拼接了用户的输入
-注入流程:
客户端修改参数--->应用--->参数传递到SQL命令中,无过滤--->解析器进行解析(执行语句)--->返回应用(返回到客户端能看到)
-注入危害:
数据库信息泄露:数据库中存放的用户的隐私信息的泄露。
网页篡改:通过操作数据库对特定网页进行篡改。
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击。
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员帐户被窜改。
服务器被远程控制,被安装后门。经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统。
破坏硬盘数据,瘫痪全系统。
一些类型的数据库系统能够让SQL指令操作文件系统,这使得SQL注入的危害被进一步放大。
2、注入分类
-数字型
参数传递数字
-字符型
参数传递字符串
3、注入点位置
-请求方式:
GET:直接在地址栏中显示出来的传输传递。
POST: 通过表单传递的方式,例如:登录,留言,存在输入框的