0%

第53天-SQL注入&数据库类型&用户权限&架构分层&符号干扰&利用过程&发现思路

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

注入漏洞不仅仅只有SQL注入,之前学长讲过他面试的过程中问到了有什么注入漏洞

除了上面图片提到的还有很多,可以自行网上搜索学习!

#知识点:

1、Web攻防-SQL注入-产生原理&应用因素

2、Web攻防-SQL注入-各类数据库类型利用

演示案例:

➢ WEB攻防-SQL注入-数据库类型利用

#数据库知识(都以mysql讲解):

1、数据库名,表名,列名,数据

数据库架构:

数据库服务器(如mysql等)

|——数据库A

|——表

|——字段

|——数据

|——数据库A

|——表

|——字段

|——数据

2、自带数据库,数据库用户及权限
information_schema 数据库sql注入相关知识点:

schemata表(记录所有数据库) 关键字段:schema_name

tables表(记录所有表):查表名 关键字段:table_schema:数据库名 table_name:表名

columns表(记录所有字段):查字段名 table_schema:库名 table_name:表名 column_name:字段名

数据库用户及权限内容:

一台MySQL服务器可以创建多个等于账号。

root(超级管理员)负责划分权限;普通账号没有先天划分权限。

root授予哪个库的哪些权限,账号才能对应操作;

未授权的数据库无法看见;

就算能够看见的数据库,权限也是拆分的,可以做到仅查询

3、数据库敏感函数,默认端口及应用

数据库自带函数也能利用来操作数据库

默认端口(后期面试可能会提问,之前护网面试提到过)

mysql:3306

oracle:1521

SQLserver:1433

Redis:6379

MongoDB:27017

不止这些剩下可以网上查一下,为什么要记这些呢,后期渗透测试的时候首先会进行端口扫描,通过端口就能判断使用的是什么数据库

4、数据库查询方法(增加删除修改更新)
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:

admin

123456

6、有无数据处理(无回显逻辑等)

无回显我们会用到延时注入

#常见SQL注入的利用过程:

1、判断数据库类型

2、判断参数类型及格式

3、判断数据格式及提交

4、判断数据回显及防护

5、获取数据库名,表名,列名

5、获取对应数据及尝试其他利用

#黑盒/白盒如何发现SQL注入

1、盲对所有参数进行测试

2、整合功能点脑补进行测试

白盒参考后期代码审计课程

利用过程:

获取数据库名->表名->列名->数据(一般是关键数据,如管理员)

大部分都是用工具跑,工具有限制或者跑不出来才手工。后面原本也有各种数据库的靶场,因为是第一节课很多东西写了也看不懂,所以等到后面讲完了或者遇到对应数据库再写