SQL Injection | SQL 注入概述

关注这个漏洞的其他相关笔记:SQL 注入漏洞 - 学习手册-CSDN博客

0x01:SQL 注入漏洞介绍

SQL 注入就是指 Web 应用程序对用户输入数据的合法性没有判断,前端传入后端的参数是可控的,并且参数会带入到数据库中执行,导致攻击者可以通过构造不同的 SQL 语句来实现对数据库进行任意操作的一种攻击方式。

0x0101:SQL 注入漏洞演示

实验工具准备

  • PHP 运行环境:phpstudy_x64_8.1.1.3.zip(Apache2.4.39 + PHP 5.6.9nts)

  • 实验环境:PIKACHU 靶场 - 字符型注入(get) => 参考:PIKACHU - 靶场笔记合集

本次的实验环境,我们采用现成的 PIKACHU 靶场,PIKACHU 靶场的安装方法参考上面提供的链接,这里就不多说了,下面直接开始演示。

输入下面的链接,访问实验环境:

 http://localhost/pikachu/vul/sqli/sqli_str.php

靶场要求我们输入 username,该值是一个字符串类型的值,我们可以随便输入一些内容,进行测试:

此时我们推测一下这个业务的查询逻辑,笔者以伪代码的形式表示出来了:

 // 获取用户输入的 name
 $username = $_GET['name'];
 // 将用户输入的 name 拼接进预定义的 SQL 语句中
 $sql = "select * from username where name='$username'";
 // 将 $sql 中的内容传递到后端数据库执行,并获取结果
 $result = exec_sql($db_connect, $sql);
 // 如果查询到结果,则返回 “欢迎”,否则返回 “您输入的用户不存在”
 if ($result == True) {
     // 成功查询到用户信息
     echo "欢迎你" . $username;
 } else {
     echo "您输入的用户不存在";
 }

在上面假设的业务逻辑中,代码未对用户传递的数据做任何的过滤就直接拼接到了 SQL 语句中,并传递给了后端,因此会造成 SQL 注入漏洞:

 测试 Payload: ' or 1=1 #'
 ​
 后端实际执行的的 Payload: select * from username where name='' or 1=1 #''

如上,我们通过传入 SQL 语句,尝试与服务器后端的查询语句拼接,成功让服务端返回了数据库中的所有内容。

除了让服务端直接爆出数据库内容,我们还可以尝试去读取目标数据库中更多的内容,甚至通过 MySQL 往目标服务器写入木马程序,进而控制整个服务器。当然,这都是后话,上面主要就是简单演示一下 SQL 注入的攻击思路和危害,更进一步的内容,笔者后面会出单期讲。

0x02:SQL 注入漏洞详解

0x0201:SQL 注入漏洞产生的条件

SQL 注入漏洞的产生需要满足以下两个条件:

  • 参数用户可控: 前端传给后端的参数内容是用户可以控制的。

  • 参数带入数据库执行: 传入的参数拼接到 SQL 语句中,且被带入数据库进行执行。

0x0202:SQL 注入通常出现的位置

一般的 Web 应用程序都是由 “视图层 + 业务逻辑层 + 数据访问层” 构成的,如下图所示:

我们以一个简单的登录操作,讲解一下上图的流程:

用户通过浏览器访问京东的首页,进入了登录页面。用户在视图层,输入了自己的账号和密码,浏览器将用户输入的账号密码通过某种方式传递到服务器的业务逻辑层,然后业务逻辑层将拿到的账号密码到数据库中进行匹配,如果匹配成功,则返回登录后的界面,否则返回登录失败的提示。

SQL 注入发生的位置,其实就是执行 SQL 语句的位置。在上面的流程中,就是业务逻辑层将拿到的账号和密码到数据库中进行匹配的地方(如果用户输入正常的账号信息,则无问题,但是如果用户传递过来的是 SQL 语句呢?)。

总的来说,所有可能与后端数据库发生交互的地方,都有可能出现 SQL 注入漏洞。

0x0203:SQL 注入漏洞产生的危害

  • 未经授权的数据访问:攻击者可以利用 SQL 注入漏洞,无需授权即可访问数据库中的数据,从而窃取用户数据,如用户凭证、个人信息或业务数据,导致用户信息泄露。

  • 数据篡改:攻击者可以修改数据库中的数据,导致数据的完整性受损。这可能导致数据不一致,对业务流程和决策产生负面影响。

  • 数据库被恶意操作:攻击者可以对数据库进行增加或删除操作,例如删除数据库中重要数据的表,或篡改数据库的系统管理员账户。

  • . 服务器被远程控制:攻击者可能获取服务器的最高权限,远程控制服务器,安装后门,从而修改或控制操作系统。此外,他们还可能破坏硬盘数据,导致整个系统瘫痪。

  • 网站被挂马,传播恶意软件:攻击者可以修改数据库中的一些字段值,嵌入网马链接,进行挂马攻击,或者用来传播恶意软件。

  • 影响业务运营:SQL 注入攻击可能导致业务中断,降低用户信任度,损害品牌声誉,甚至带来法律责任。

0x0204:SQL 注入漏洞的防范措施

  • 使用参数化查询或预编译语句,而不是直接拼接 SQL 语句。

  • 对用户输入进行严格的验证和过滤,防止恶意输入。

  • 使用最小权限原则,为数据库账户分配必要的权限。

  • 定期更新和修补数据库管理系统和应用程序的漏洞。

  • 使用 Web 应用防火墙(WAF)等安全设备,增强对 SQL 注入攻击的防御能力。

0x03:参考资料

  • 《Web 安全攻防:渗透测试实战指南》 ISBN 978-7-121-34283-7

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/895174.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW自动化流动返混实验系统

随着工业自动化的不断发展,连续流动反应器在化工、医药等领域中的应用日益广泛。传统的流动返混实验操作复杂,数据记录和处理不便,基于LabVIEW的全自动流动返混实验系统能自动测定多釜反应器、单釜反应器和管式反应器的停留时间分布&#xff…

pytest框架的allure报告怎么去看

pytest框架的allure报告怎么去看 一、安装jdk和allure1.1安装jdk(自行找资料)1.2安装Allure 二、编写pytest代码三、执行脚本3.1 运行测试并生成 Allure 结果3.2 你可以使用以下命令来查看生成的报告3.3生成的视图 一、安装jdk和allure 1.1安装jdk&…

LabVIEW提高开发效率技巧----VI继承与重载

在LabVIEW开发中,继承和重载是面向对象编程(OOP)中的重要概念。通过合理运用继承与重载,不仅能提高代码的复用性和灵活性,还能减少开发时间和维护成本。下面从多个角度介绍如何在LabVIEW中使用继承和重载,并…

机器学习建模分析

机器学习 5.1 机器学习概述5.1.1 机器学习与人工智能5.1.2 python机器学习方法库 5.2 回归分析5.2.1 回归分析原理5.2.2 回归分析实现 5.3 分类分析5.3.1 分类学习原理5.3.2 决策树5.5.3 支持向量机 5.4 聚类分析5.4.1 聚类任务5.4.2 K-means算法 5.5 神经网络和深度学习5.5.1神…

YOLO11来啦 | 详细解读YOLOv8的改进模块!

简介 2024年可谓是YOLO历史性的一年,9月份的最后一天迎来了YOLO2024年的第三部巨作。2024年2月21日,继 2023 年 1 月 YOLOv8 正式发布一年多以后,YOLOv9 才终于到来了!YOLOv9提出了可编程梯度信息(Programmable Gradi…

msql事务隔离级别 线上问题

1. 对应代码 解决方式: 在事务隔离级别为可重复读(RR)时,数据库确实通常会记录当前数据的快照。 在可重复读隔离级别下,事务在执行期间看到的数据是事务开始时的数据快照,即使其他事务对数据进行了修改&am…

Artistic Oil Paint 艺术油画着色器插件

只需轻轻一点,即可将您的视频游戏转化为艺术品!(也许更多…)。 ✓ 整个商店中最可配置的选项。 ✓ 六种先进算法。 ✓ 细节增强算法。 ✓ 完整的源代码(脚本和着色器)。 ✓ 包含在“艺术包”中。 &#x1f…

读人工智能全传16读后总结与感想兼导读

读人工智能全传16读后总结与感想兼导读.png 1. 基本信息 人工智能全传 [英]迈克尔伍尔德里奇 著 浙江科学技术出版社,2021年3月出版 1.1. 读薄率 书籍总字数234千字,笔记总字数46186字。 读薄率46186234000≈19.7% 1.2. 读厚方向 千脑智能脑机穿越未来呼啸而来虚拟人…

Redis知识应用索引指南

Redis,全称为Remote Dictionary Server,是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的持久化机制,在现代应用中扮演着至关重要的角色 1 什么是redis Redis是一个使用ANSI C语言编写的开源、跨平台的键值存储系…

ubuntu18开启ssh服务

本部分主要是记述下如何打开ubuntu的ssh功能,从而可以以ssh的方式远程连接ubuntu,而不需要每次都在现场工作。 1. 更新源 $ apt update [sudo apt update] 2. 下载openssh-server # sudo apt install openssh-server 3. 看下服务状态 # service s…

[C#][winform]基于yolov8的道路交通事故检测系统C#源码+onnx模型+评估指标曲线+精美GUI界面

【重要说明】 该系统以opencvsharp作图像处理,onnxruntime做推理引擎,使用CPU进行推理,适合有显卡或者没有显卡windows x64系统均可,不支持macOS和Linux系统,不支持x86的windows操作系统。由于采用CPU推理,要比GPU慢。…

kafka自定义配置信息踩坑

org.apache.kafka.common.config.ConfigException: Invalid value 0 for configuration acks: Expected value to be a string, but it was a java.lang.Integer 场景描述: 单个kafka使用springboot框架自带的 yml 配置完全OK(因为底层会帮我们处理好类…

重学SpringBoot3-集成Spring Security(一)

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Spring Security(一) 1. 简介与概念2. 基础配置2.1. 添加依赖2.1 基本认证与授权配置 3. 密码加密3.1. 如何加密用户密码3.2…

区块链技术在网络安全中的应用研究

摘要: 随着网络技术的快速发展,网络安全问题日益凸显。区块链技术以其去中心化、不可篡改、可追溯等特性,为网络安全提供了新的解决方案。本文深入探讨了区块链技术在网络安全多个领域的应用,包括数据加密与存储、身份认证、网络攻…

Linux 防火墙的开启、关闭、禁用命令

Linux 防火墙的开启、关闭、禁用命令 文章目录 Linux 防火墙的开启、关闭、禁用命令1.设置开机启用防火墙2.设置开机禁用防火墙3.启动防火墙4.关闭防火墙5.检查防火墙状态 1.设置开机启用防火墙 systemctl enable firewalld.service2.设置开机禁用防火墙 systemctl disable f…

算法: 模拟题目练习

文章目录 模拟替换所有的问号提莫攻击Z 字形变换外观数列数青蛙 总结 模拟 替换所有的问号 按照题目的要求写代码即可~ public String modifyString(String ss) {int n ss.length();if (n 1) {return "a";}char[] s ss.toCharArray();for (int i 0; i < n; i…

大数据治理--数据生命周期管理

目录 ​编辑一、数据生命周期阶段 1.1 数据生命周期的定义 1.2 数据生命周期的主要阶段 1.2.1 创建&#xff08;Creation&#xff09; 1.2.2 存储&#xff08;Storage&#xff09; 1.2.3 使用&#xff08;Usage&#xff09; 1.2.4 归档&#xff08;Archiving&#xff09…

概率图模型中的模型推断

文章目录 摘要Abstract1. 概率图模型1.1 模型推断概念1.2 模型推断分类1.2.1 变量消去1.2.2 信念传播1.2.3 近似推断1.2.3.1 采样法1.2.3.1.1 MCMC(马尔可夫链蒙特卡罗)方法 1.2.3.2 变分推断 1.3 话题模型1.3.1 LDA的基本单元1.3.2 话题模型的构成1.3.3 LDA的基本问题1.3.3.1 …

Threejs 实现3D 地图(01)创建基本场景

"d3": "^7.9.0", "three": "^0.169.0", "vue": "^3.5.10" <script setup> import { onMounted,ref } from vue import * as THREE from three import * as d3 from "d3"; //莫开托坐标 矫正地图…

快速上手C语言【下】(非常详细!!!)

目录 1. 指针 1.1 指针是什么 1.2 指针类型 1.2.1 指针-整数 1.2.2 指针解引用 1.3 const修饰 1.4 字符指针 1.5 指针-指针 1.6 二级指针 2. 数组 2.1 定义和初始化 2.2 下标引用操作符[ ] 2.3 二维数组 2.4 终极测试 3. 函数 3.1 声明和定义 3.2 传值调用…