首页 > 数据库 >SQL Injection | SQL 注入概述

SQL Injection | SQL 注入概述

时间:2024-10-20 13:21:45浏览次数:8  
标签:语句 数据库 用户 漏洞 概述 SQL Injection 注入

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

0x01:SQL 注入漏洞介绍

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

0x0101:SQL 注入漏洞演示

实验工具准备

本次的实验环境,我们采用现成的 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:参考资料

标签:语句,数据库,用户,漏洞,概述,SQL,Injection,注入
From: https://blog.csdn.net/m0_73360524/article/details/142903067

相关文章

  • SQL Injection | MySQL 手工注入全流程
    0x01:MySQL手工注入——理论篇手工注入MySQL数据库,一般分为以下五个阶段,如下图所示:第一阶段-判断注入点:在本阶段中,我们需要判断注入点的数据类型(数字型、字符型、搜索型、XX型)与后端查询方式,并使用对应的SQL语句进行测试,判断出目标是否存在注入点。第二阶段-......
  • 深入优化MySQL深度分页:从第10000页出发,Java模拟高效分页技巧
    在深度分页(如LIMIT99990,10)中,SQL的优化方式主要是为了避免MySQL在执行时需要扫描大量的无用数据,从而提高查询效率。以下是几种常见的SQL层面的优化方法:1.使用覆盖索引优化覆盖索引是一种索引优化技术,即查询只通过索引就可以获得所需的数据,而不需要访问实际的数据......
  • 常用SQL
    多表查询--多表查询-数据准备usemydb3;--创建部门表createtableifnotexistsdept3( deptnovarchar(20)primarykey, --部门号 namevarchar(20)--部门名字);--创建员工表createtableifnotexistsemp3( eidvarchar(20)pr......
  • Mysql高级-day01
    Mysql高级-day01MySQL高级课程简介序号Day01Day02Day03Day041Linux系统安装MySQL体系结构应用优化MySQL常用工具2索引存储引擎查询缓存优化MySQL日志3视图优化SQL步骤内存管理及优化MySQL主从复制4存储过程和函数索引使用MySQL锁问题综......
  • JavaScript 的基础语法和数据类型的概述
    JavaScript是一种广泛使用的编程语言,主要用于Web开发。它拥有简洁的语法和丰富的功能。以下是JavaScript的基础语法和数据类型的概述。基础语法变量声明使用var、let或const关键字声明变量。varname="Alice";letage=25;constpi=3.14;数据类型J......
  • 一文彻底弄懂MySQL的MVCC多版本控制器
    InnoDB的MVCC(Multi-VersionConcurrencyControl,多版本并发控制)是MySQL实现高并发事务处理的一种机制。通过MVCC,InnoDB可以在高并发环境下支持事务隔离,并提供非阻塞的读操作,从而避免锁定所有读操作带来的性能瓶颈。MVCC允许事务在不加锁的情况下读取数据,保证了性能和一......
  • mysql8.0安装和配置教程
    1.下载地址:https://dev.mysql.com/downloads/mysql/进入界面是最新的版本,这里下载。1.安装MySQL2.下载3.选择自定义安装4.安装结束5.配置mysql环境变量我使用系统Windows11安装mysql选择自定义安装路径是:D:\ProgramFiles\MySQLServer8.0右键......
  • MySQL数据库备份与恢复
    MySQL数据库的备份与恢复是数据库管理的重要部分,它可以帮助我们保护数据不受硬件故障、数据损坏、人为错误等因素的影响。以下是MySQL数据备份与恢复的详细步骤和代码示例。数据备份1.使用 mysqldump 工具mysqldump是MySQL自带的一个强大的命令行工具,用于导出数据库......
  • windows下在Postgresql数据库中扩展postgis功能实现存储空间地理数据
    操作分为以下三步:1.下载 Postgresql数据库(在官网直接下载即可)2.下载安装postgis(需要对应pgadmin版本安装时路径要与pgadmin路径一致)3.在pgadmin中新建数据库扩展postgis(执行语句即可)1.下载 Postgresql数据库(在官网直接下载即可)Download(pgadmin.org)2.下载安装postg......
  • 使用MySQL之用通配符进行过滤
    1.LIKE操作符通配符(wildcard):用来匹配值的一部分的特殊字符。搜索模式(searchpattern):由字面值、通配符或两者组合构成的搜索条件。通配符本身实际是SQL的WHERE子句中有特殊含义的字符,SQL支持几种通配符。为在搜索子句中使用通配符,必须使用LIKE操作符。LIKE指示MySQL后跟的......