我是学过数据库的所以有特别简单的东西概念也没写,初次学习建议先大概了解一下数据库!

注入漏洞不仅仅只有SQL注入,之前学长讲过他面试的过程中问到了有什么注入漏洞
除了上面图片提到的还有很多,可以自行网上搜索学习!
#知识点:
1、Web攻防-SQL注入-产生原理&应用因素
2、Web攻防-SQL注入-各类数据库类型利用
演示案例:
➢ WEB攻防-SQL注入-数据库类型利用
#数据库知识(都以mysql讲解):
1、数据库名,表名,列名,数据
数据库架构:
数据库服务器(如mysql等)
|——数据库A
|——表
|——字段
|——数据
|——数据库A
|——表
|——字段
|——数据
information_schema 数据库sql注入相关知识点:
schemata表(记录所有数据库) 关键字段:schema_name
tables表(记录所有表):查表名 关键字段:table_schema:数据库名 table_name:表名
columns表(记录所有字段):查字段名 table_schema:库名 table_name:表名 column_name:字段名
数据库用户及权限内容:
一台MySQL服务器可以创建多个等于账号。
root(超级管理员)负责划分权限;普通账号没有先天划分权限。
root授予哪个库的哪些权限,账号才能对应操作;
未授权的数据库无法看见;
就算能够看见的数据库,权限也是拆分的,可以做到仅查询
数据库自带函数也能利用来操作数据库
默认端口(后期面试可能会提问,之前护网面试提到过)
mysql:3306
oracle:1521
SQLserver:1433
Redis:6379
MongoDB:27017
不止这些剩下可以网上查一下,为什么要记这些呢,后期渗透测试的时候首先会进行端口扫描,通过端口就能判断使用的是什么数据库
mysql增删改查:
查:select * from 表名 where 列名=“条件”;
增:insert into 表名(`列名1`,`列名2`)values(列1值1','列2值2');
删:delete from 表名 where 列名=“条件”;
改:update 表名 set 列名 = 数据 where 列名 = “条件”;
#SQL注入产生原理:
代码中执行的SQL语句存在可控变量导致
就好理解的案例:大部分站点都有搜索功能,你只需要输入关键字,它的后端逻辑为select * from 表 where 字段=我们的输入,这就是我们可以控制where后面的参数,用后续的注入方式就能获取到你想要的东西
#影响SQL注入的主要因素(后续按这个顺序讲):
1、数据库类型(权限操作)
不同数据库类型注入语句不同
2、数据操作方法(增删改查)
3、参数数据类型(符号干扰)
比如:select * from 表 where 字段=”$username”
黑盒测试中字符注入一定要考虑引号,不考虑的话你把你的注入语句都写在引号内不生效
4、参数数据格式(加密编码等)
你输入注入内容,后端接收数据会进行解密解码,带入带sql中执行,所以你必须在一开始输入的时候就进行对应的加密
5、提交数据方式(数据包部分)
按照对应格式(json,xml等)注入,注入语句不能破坏数据提交格式
json:{“id”:”1”,”username”:”admin”}
xml:
6、有无数据处理(无回显逻辑等)
无回显我们会用到延时注入
#常见SQL注入的利用过程:
1、判断数据库类型
2、判断参数类型及格式
3、判断数据格式及提交
4、判断数据回显及防护
5、获取数据库名,表名,列名
5、获取对应数据及尝试其他利用
#黑盒/白盒如何发现SQL注入
1、盲对所有参数进行测试
2、整合功能点脑补进行测试
白盒参考后期代码审计课程
利用过程:
获取数据库名->表名->列名->数据(一般是关键数据,如管理员)
大部分都是用工具跑,工具有限制或者跑不出来才手工。后面原本也有各种数据库的靶场,因为是第一节课很多东西写了也看不懂,所以等到后面讲完了或者遇到对应数据库再写