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.mzph.cn/bicheng/56884.shtml

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

相关文章

(10) GTest c++单元测试(mac版)

文章目录 概要安装实现机制-断言(简单、独立的测试)实现机制-测试套件实现机制-Test Fixture和事件 概要 官方文档 https://google.github.io/googletest/ 安装 git clone https://github.com/google/googletestcd googletestmkdir build && c…

JavaScript 了解专用工作者线程

目录 一、何为专用工作者线程二、专用工作者线程的全局对象三、创建专用工作者线程的方法四、专用工作者线程特点END 一、何为专用工作者线程 最简单的WEB工作者线程,执行在页面加载外的其他任意如网络请求,繁杂计算操作并可以与页面通信. 二、专用工作者线程的全局对象 专用…

十、结构型(外观模式)

外观模式(Facade Pattern) 概念 外观模式(Facade Pattern)是一种结构型设计模式,旨在为复杂子系统提供一个简化的统一接口。通过外观模式,客户端可以与子系统交互,而无需了解子系统的内部复杂性…

数字化营销助企业在生态平台实现内卷突围

在当今数字化时代,企业竞争激烈,内卷化严重。而数字化生态平台建设与数字化营销为企业带来了新机遇。 数字化生态平台意义重大。它能整合企业内外资源,提高运营效率。打破地域限制,拓展市场,吸引更多客户。还能为企业创…

AdGuard v4.7.61 拦截所有广告 解锁高级版

AdGuard v4.7.61 拦截所有广告 解锁高级版 下载链接:夸克网盘分享

三、MyBatis实践(3):多表映射,动态语句,高级扩展

三、MyBatis多表映射 3.1 多表映射概念 多表查询结果映射思路 上面课程中,我全面讲解了单表的mybatis操作!但是开发中更多的是多表查询需求,这种情况我们如何让进行处理? MyBatis 思想是:数据库不可能永远是你所想或所…

【AI副业项目】太离谱了!爆涨粉47W+,下一个风口项目AI+大健康养S赛道,单月变现30W,教你如何用AI做爆款健康养生账号

我一直说小红薯平台是最适合新手素人做的平台,去中心化的平台,任何普通人都可以在这个平台分一杯羹的平台。 但但但是很多朋友发小红薯作品都是超低的小眼睛,连最基本的流量都没拿到。 从他们的经历来看就是小红薯太难做了。那是没有掌握技…

【Vue】Vue3.0 (十二)、watchEffect 和watch的区别及使用

上篇文章: 【Vue】Vue3.0 (十二)、watch对ref定义的基本类型、对象类型;reactive定义的对象类型的监视使用 🏡作者主页:点击! 🤖Vue专栏:点击! ⏰️创作时间&…

智慧油田智能安全管控方案-AI助力油气田安全管控升级

在科技日新月异的今天,万物纵横科技凭借其前沿的智慧油田智能安全管控方案,正引领着油气田行业向智能化、高效化转型。该方案深度融合了AI视频智能分析与AIoT(物联网人工智能)技术,为采油场、油气场的设备运维、环境监…

两个字符串的最长 公共子序列

给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回 0 。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以…

Unity Apple Vision Pro 自定义手势识别交互

Vision Pro 是可以使用Unity 提供的XR Hand SDK,可通过XR Hand制作自定义手势识别,通过识别出不同的手势做自定义交互 效果预览 在VisionPro中看VisionPro|手势交互|自定义手势识别 Unity Vision Pro 中文课堂教程地址: Unity3D Vision Pro 开发教程【…

2024全网最详细CTF入门指南、CTF夺旗赛使用工具及刷题网站

2024年最新的CTF(Capture The Flag,夺旗赛)入门指南如下,涵盖了入门思路、常见题型及练习网站推荐,帮助你逐步了解并提升在CTF中的解题技巧。 如果你对网络安全入门感兴趣,我给大家整理好了相关资料&#…

vmware ubuntu根分区扩容

从你的 fdisk -l 输出来看,系统的 /dev/sda 是你的主要磁盘,大小为 80 GB,分为三个分区: /dev/sda1:1 MB 的 BIOS 引导分区/dev/sda2:2 GB 的 Linux 文件系统分区/dev/sda3:78 GB 的 Linux 文件…

Unity3D ScrollView 滚动视图组件详解及代码实现

在Unity3D中,ScrollView(滚动视图)是一种常用的UI组件,它允许用户通过滚动来查看超出当前视图范围的内容。ScrollView通常用于显示长列表、大量文本或图像等。本文将详细介绍Unity3D中的ScrollView组件,并提供代码实现…

Java集合剖析2】Java集合底层常用数据结构

一、数据结构与集合 接下来就要学习集合具体的实现类了,集合的实现类底层可能用1种或多种数据结构来存储数据。所以在学习集合的实现类前,我们有必要了解一下一些常见的数据结构,这样我们在后面查看集合实现类的底层源码时,才不会…

项目模块三:Socket模块

一、模块设计 1、套接字编程常用头文件展示 #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> 2、成员函数设计 &#xff08;1&#xf…

题目:连续子序列

解题思路&#xff1a; 首先&#xff0c;不能使用暴力枚举&#xff0c;时间为O(n2)&#xff0c;超时。以下为正确做法&#xff1a; 假设找到一段区间&#xff08;其和>m&#xff09;&#xff0c;如上图黄色部分&#xff0c;那么该区间加上i后面的元素形成的新区间和都>m&a…

Excel中如何进行傅里叶变换(FT),几步完成

在 Excel 中&#xff0c;虽然没有像 MATLAB 那样专门的函数库来直接进行傅里叶变换&#xff0c;但可以使用 Excel 内置的分析工具库提供的傅里叶变换&#xff08;FT &#xff0c;Fourier Transform&#xff09;功能。这个工具可以对数据进行频域分析。以下是如何在 Excel 中进行…

【.net core使用minio大文件分片上传】.net core使用minio大文件分片上传以及断点续传、秒传思路

版本&#xff1a;.net core 7 需求&#xff1a;net限制了上传的大小&#xff0c;只能上传25M上下的文件&#xff0c;如果上传一个八十多兆的文件&#xff0c;swagger接口报错&#xff0c;如果前端调用上传接口&#xff0c;会报CORS跨域错误&#xff0c;这篇文章介绍怎么使用分片…

C#学习笔记(九)

C#学习笔记&#xff08;九&#xff09; 第六章 面向对象编程&#xff08;一&#xff09;类与对象、字段与属性一、类与对象正确的理解1. 什么是类&#xff1f;2.什么是对象&#xff1f;3. 类与对象的区别 二、类的基本规范和对象使用1. 类的规范 三、类的访问修饰符&#xff08…