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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCS字体、字号更改+CCS下载官方链接

Step1、 按照图示箭头操作 step2 Step3 点击确定,点击Apply(应用),点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载:官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…

MEMC功能详解

文章目录 MEMC的工作原理:优点:缺点:适用场景:1. Deblur(去模糊)2. Dejudder(去抖动)总结两者区别: MEMC(Motion Estimation and Motion Compensation&#x…

【开源免费】基于SpringBoot+Vue.JS房屋租赁系统(JAVA毕业设计)

本文项目编号 T 020 ,文末自助获取源码 \color{red}{T020,文末自助获取源码} T020,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

编码方式知识整理【ASCII、Unicode和UTF-8】

编码方式 一、ASCII编码二、Unicode 编码三、UTF-8编码四、GB2312编码五、GBK编码 计算机中对数据的存储为二进制形式,但采用什么样的编码方式存储,效率更高。主要编码方式有 ASCII、Unicode、UTF-8等。 英文一般为1个字节,汉字一般为3个字节…

代码复现(五):GCPANet

文章目录 net.py1.class Bottleneck:残差块2.class ResNet:特征提取3.class SRM:SR模块4.class FAM:FIA模块5.class CA:GCF模块6.class SA:HA模块7.class GCPANet:网络架构 train.pytest.py 论文…

【数学二】一元函数积分学-定积分的应用-平面图形面积、旋转体体积、函数的平均值、平面曲线的弧长、旋转曲面面积

考试要求 1、理解原函数的概念,理解不定积分和定积分的概念. 2、掌握不定积分的基本公式,掌握不定积分和定积分的性质及定积分中值定理,掌握换元积分法与分部积分法. 3、会求有理函数、三角函数有理式和简单无理函数的积分. 4、理解积分上限…

进程与线程的区别

1.进程的简单了解 进程是计算机中程序在某个数据集合上的一次运行活动,是操作系统进行资源分配和调度的基本单位。 从不同角度来看: ● 资源分配角度:进程拥有独立的内存地址空间、系统资源(如 CPU 时间、文件描述符等&#xf…

【OD】【E卷】【真题】【100分】光伏场地建设规划(PythonJavajavaScriptC++C)

题目描述 祖国西北部有一片大片荒地,其中零星的分布着一些湖泊,保护区,矿区; 整体上常年光照良好,但是也有一些地区光照不太好。 某电力公司希望在这里建设多个光伏电站,生产清洁能源对每平方公里的土地进行了发电评…

关于测试翻译准确率的相关方法

本文提到的翻译准确率测试指标是BLEU,以及使用Python库-fuzzywuzzy来计算相似度 一、基于BLEU值评估 1.只评估一段话,代码如下 from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction# 机器翻译结果 machine_translation "Ho…

【动手学深度学习】8.3 语言模型(个人向笔记)

下面是语言模型的简介 1. 学习语言模型 使用计数来建模 N元语法:这里的元可以理解为我们之前的时间变量。对于 N 元语法,我们可以把所有长度为 N 的子序列存下来。其中 1 元语法用的很少。这里其实就是算概率的时候我们不往前看所有的概率,…

ACL和NAT

一、ACL 1.概述 访问控制列表Access Control List是由一系列permit或deny语句组成的、有序规则的列表是一个匹配工具,对报文进行匹配和区分 2.ACL应用 匹配流量在traffic-filter中被调用在NAT(Natwork Address Translation)中被调用在路由策略中被调用在防火墙的…

Linux系统:本机(物理主机)访问不了虚拟机中的apache服务问题的解决方案

学习目标: 提示:本文主要讲述-本机(物理主机)访问不了虚拟机中的apache服务情况下的解决方案 Linux系统:Ubuntu 23.04; 文中提到的“本机”:代表,宿主机,物理主机; 首先&#xff0c…

OpenCV高级图形用户界面(14)交互式地选择一个或多个感兴趣区域函数selectROIs()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 允许用户在给定的图像上选择多个 ROI。 该函数创建一个窗口,并允许用户使用鼠标来选择多个 ROI。控制方式:使用空格键或…

【Unity新闻】Unity 6 正式版发布

Unity CEO Matt Bromberg 在今天自豪地宣布,Unity 6 正式发布!作为迄今为止最强大和稳定的版本,Unity 6 为游戏和应用开发者提供了大量的新功能和工具,帮助他们加速开发并提升性能。 本次正式版是6.0000.0.23f1(LTS&a…

Django学习(三)

Django的设计模式及模板层 传统的MVC(例如java) Django的MTV 模板层: 模板加载: 代码: views.py def test_html(request):#方案一# from django.template import loader# 1. 使用loader加载模板# t loader.get_…

WIFI实现透传+接线图

单片机通过TX接WIFI模块的RX将设置的AT代码写入WIFI模块(连接WIFI调为设备模式(有设备,路由,双模等模式)) WIFI模块将响应信号通过TX通过CH340发给PC的RX 通过STC-ISP或安信可串口调试助手查看响应信息 …

Parallels Desktop20最新版本虚拟机 让双系统无缝切换成为现实!

Parallels Desktop 20最新版本虚拟机:让双系统无缝切换成为现实! 嘿,各位小伙伴们~🎉 如果你是像我一样,既爱 Windows 又放不下 macOS 的纠结星人,那今天这篇分享你可要仔细看啰!&am…

Linux学习笔记9 文件系统的基础

一、查看文件组织结构 Linux中一切都是文件。 Linux和Win的文件系统不是一个结构,Linux存在的根目录是所有目录的起点。 所有的存储空间和设备共享一个根目录,不同的磁盘块和分区挂载在其下,成为某个子目录的子目录,甚至设备也挂…

Windows系统部署redis自启动服务【亲测可用】

文章目录 引言I redis以本地服务运行(Windows service)使用MSI安装包配置文件,配置端口和密码II redis服务以终端命令启动缺点运行redis-server并指定端口和密码III 知识扩展确认redis-server可用性Installing the Service引言 服务器是Windows系统,所以使用Windows不是re…

图像识别解决方案

图像识别解决方案是一种基于人工智能技术的图像处理和识别方法,能够实现对图像内容的自动分析和理解。以下是朗观视觉小编对图像识别解决方案的详细阐述: 一、技术原理 图像识别解决方案的核心原理是机器学习算法和深度学习网络。通过收集大量的图像数据…