SQL注入总概述

news2026/4/30 14:52:19
没问题咱们不用表格我给你按模块拆解得更详细、更口语化一点把每个点的意思、怎么用、有啥区别都讲清楚一、SQL注入的「基础分类维度」这部分是你拿到一个网站判断“它有没有注入、怎么注入”的核心依据一共分4个维度。1. 数据库类型不同的数据库语法、注入函数、可利用的特性都不一样是你后续写注入语句的前提。MySQL最常见的开源数据库也是入门学习的重点。它自带information_schema这个系统库里面存了所有表名、字段名是联合查询注入的关键同时支持sleep()、benchmark()这类延时函数方便做盲注。大部分中小网站用的都是它。MSSQLSQL Server微软的数据库多见于Windows平台的企业系统。它的特点是权限高的时候能调用xp_cmdshell直接执行系统命令注入的破坏力会更大但语法和MySQL有不少差异比如注释符、系统表都不一样。Oracle大型企业级数据库权限控制非常严格注入场景相对复杂。一般很少能直接拿到系统命令大多是通过错误回显、存储过程或者utl_http这类扩展包来利用门槛比MySQL高很多。Access轻量级的桌面数据库多见于老的ASP网站。它没有独立的数据库服务也没有information_schema注入的时候大多靠猜解表名而且不支持联合查询方法比较受限。其他比如PostgreSQL、MongoDB这类MongoDB属于NoSQL注入逻辑和SQL完全不一样属于单独的分支。2. 提交方式注入点在哪里指的是你把恶意SQL语句提交给服务器的渠道决定了你要改哪里的参数。GET提交最常见的方式参数直接拼在URL里比如?id1、?nameadmin。你直接在浏览器地址栏修改参数就能测试比如改成?id1 and 12看页面会不会报错。POST提交参数放在HTTP请求体里一般是表单提交、接口传参的时候用比如登录框、注册页、搜索框。这种你没法直接在地址栏改得用抓包工具比如Burp Suite把请求抓下来修改里面的参数再发出去。COOKIE提交参数放在请求的Cookie字段里比如很多网站会用Cookie存用户ID、会话信息。这种方式常用来绕过一些简单的参数过滤因为很多WAF对Cookie的检测会比URL参数松一点。REQUEST提交这个不是一个独立的提交方式而是PHP里的一个超全局变量它会同时接收GET、POST、Cookie传过来的参数。也就是说你不管用GET还是POST提交它都能接收到这种情况你得实际测试一下看哪种方式能生效。HTTP头提交注入点藏在HTTP请求头里比如User-Agent浏览器标识、Referer来源页面、X-Forwarded-For这些字段。这种情况多见于后端会把请求头的信息存到数据库里或者用请求头做日志记录恶意的请求头就会被当成SQL语句执行。其他比如文件上传时的文件名、JSON请求体里的参数、WebSocket的消息内容这些都可能成为注入点属于比较特殊的场景。3. 数据类型怎么构造闭合语句指的是你提交的参数在后端SQL语句里是什么类型决定了你写注入语句时要不要加引号、怎么闭合。数字型参数直接作为数字参与SQL运算后端的SQL语句大概是select * from users where id 1参数没有被引号包裹。这种情况你直接拼接SQL语句就行比如?id1 and 12不需要额外处理引号。字符型参数被单引号或者双引号包裹比如后端语句是select * from users where name admin。这时候你直接加and 12是没用的因为它会被当成字符串的一部分。你得先把引号闭合比如改成?nameadmin and 12 --这里的把前面的字符串闭合了--是注释符把后面的单引号注释掉这样and 12就能被当成SQL语句执行了。其他类型比如日期型参数后端语句可能是select * from logs where date 2025-01-01这种也属于字符型的一种需要用引号闭合还有布尔型参数比如?status1本质上也是数字型判断逻辑和数字型一样。4. 查询方式注入依托的SQL语句指的是你的恶意语句是拼接到哪一类SQL操作里执行的不同的操作能做的事不一样。select查询最常见的场景比如查询用户信息、商品信息、文章列表。这是联合查询注入、盲注的主战场目标就是偷取数据库里的数据比如管理员账号密码。insert插入比如注册、留言、评论这类操作后端会执行insert into users (name, pass) values (admin, 123)。你如果在用户名的位置注入比如填admin, (select pass from users where id1) --就可能把管理员的密码写到你的用户名里或者直接插入一条管理员账号。delete删除比如删除留言、订单后端语句是delete from messages where id 1。注入的话比如?id1 or 11就会把表里所有数据都删掉破坏力很大。update更新比如修改密码、修改个人信息后端语句是update users set pass123 where id1。注入的话比如修改成update users set pass123 where id1 or 11就会把所有用户的密码都改成你设置的值。order by排序很多网站会用order by id或者order by name来排序数据参数可控的话就会产生注入。最常见的用法是判断查询的字段数比如order by 1正常order by 5报错说明这个查询有4个字段这是联合查询注入的前提条件。5. 回显/盲注注入的核心分支这是SQL注入最关键的分类直接决定了你用什么方法攻击。回显注入就是你执行SQL语句后结果会直接显示在页面上。比如你用union select拼接了查询管理员账号的语句页面上就会直接显示出账号和密码。这种攻击效率最高不用猜直接拿数据。无回显注入盲注页面不会直接显示SQL执行的结果你只能通过页面的变化来间接判断语句执行的结果分两种布尔盲注页面只有“正常”和“异常”两种状态比如and 11页面正常and 12页面异常你就可以通过构造条件比如and ascii(substr(database(),1,1))115逐位猜解数据库名的每一个字符。延时盲注利用sleep()这类延时函数比如and sleep(5)如果页面响应时间明显变长说明语句执行成功了。你可以通过控制延时的时间来判断条件的真假比如猜解字符的时候猜对了就延时5秒猜错了就正常返回。二、WAF绕过技术WAFWeb应用防火墙会识别并拦截常见的注入语句绕过的核心思路就是“改变语句的形式但不改变它的逻辑”常见的方法有这些更改提交方法比如原来的GET请求被拦截了改成POST提交或者把参数拆分到多个位置比如把id1改成id1放到URL里and 12放到Cookie里让WAF没法完整匹配。大小写混合WAF很多时候只会匹配小写的关键词比如select你改成sElEcT、UNion就能绕过一些简单的规则。加解密编码类比如URL编码把空格改成%20把单引号改成%27或者用Unicode编码、HTML实体编码把关键词转换成WAF识别不出来的形式到了后端数据库还是会被还原成正常的SQL语句。注释符混用用/*...*/注释符把关键词拆开比如sel/*abc*/ect或者用--、#、%23这些不同的注释符绕过对--的拦截。等价函数替换比如把sleep()换成benchmark(1000000,sha1(test))把and换成把or换成||功能一样但WAF匹配不到原来的关键词。特殊符号混用用制表符%09、换行符%0A、回车符%0D代替空格比如select%0A*%0Afrom%0Ausers很多WAF会把空格当成关键词分隔符换成其他空白符就匹配不到了。三、其他特殊注入方式这些是常规注入之外针对特殊场景的注入方法加解密注入前端提交的参数是加密过的比如密码用了MD5加密或者参数用了AES加密后端会解密之后再拼接到SQL语句里。这种情况你得先破解前端的加密逻辑或者找到加密算法的漏洞构造出能解密后变成恶意SQL语句的参数。JSON注入注入点在JSON格式的请求体里比如{username:admin,password:123}后端直接把JSON里的字段拼接到SQL里。这种情况你要构造符合JSON格式的恶意语句比如{username:admin or 11 --,password:123}还要注意JSON的转义规则比如引号、斜杠这些特殊字符。LDAP注入针对LDAP目录服务的注入逻辑和SQL注入类似都是构造恶意的查询条件但语法不一样用的是*、()这些特殊符号来绕过过滤或者执行恶意查询常见于企业内部的用户认证系统。二次注入恶意的SQL语句第一次提交的时候后端做了过滤被当成普通数据存到了数据库里但后续的业务逻辑里后端会直接把数据库里的这个数据拼接到SQL语句里执行这时候恶意语句就被触发了。比如你注册了一个用户名是admin --第一次注册的时候被过滤了但后台修改用户权限的时候直接把用户名拼进SQL就会把管理员的权限改掉。堆叠注入利用数据库支持多语句执行的特性用分号;分隔多条SQL语句比如?id1; drop table users;后端执行完select * from users where id1之后会继续执行后面的drop table users直接把表删掉。MySQL在开启多语句执行的时候支持这个威力很大。四、SQL注入防御方案最后是怎么防注入分开发和防护两个层面代码层面的过滤与规范输入验证对参数做严格的校验比如ID必须是数字用户名只能包含字母和数字长度不能超过限制直接把不符合规则的请求拦截掉。参数化查询预编译语句这是最根本的防御方法用PreparedStatement这类预编译接口让SQL语句和参数完全分离参数不会被当成SQL语句执行从根源杜绝注入。最小权限原则给数据库账号分配的权限越小越好比如只给查询的权限不给删除、修改、创建表的权限就算被注入了也没法做太过分的事。错误信息脱敏后端不要直接把数据库的报错信息返回给前端比如You have an error in your SQL syntax这种信息会泄露数据库的结构给攻击者提供线索。WAF产品部署 在网站前面部署Web应用防火墙配置规则拦截常见的注入语句、异常请求比如拦截包含union select、sleep、drop这些关键词的请求限制请求的频率防止暴力猜解。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…