当前位置: 首页 > article >正文

SQL注入总概述

没问题咱们不用表格我给你按模块拆解得更详细、更口语化一点把每个点的意思、怎么用、有啥区别都讲清楚一、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这些关键词的请求限制请求的频率防止暴力猜解。

相关文章:

SQL注入总概述

没问题,咱们不用表格,我给你按模块拆解得更详细、更口语化一点,把每个点的意思、怎么用、有啥区别都讲清楚👇一、SQL注入的「基础分类维度」这部分是你拿到一个网站,判断“它有没有注入、怎么注入”的核心依据&#xf…...

别再写错pyqtgraph实时绘图了!一个QTimer+setData搞定动态曲线(附完整代码)

PyQtGraph实时绘图性能优化:QTimer与setData的正确打开方式 第一次接触PyQtGraph时,我像大多数从Matplotlib转来的开发者一样,习惯性地在每次数据更新时重新绘制整个图表。直到程序卡顿到无法运行,才意识到自己掉进了性能陷阱。本…...

别再只用CBAM了!手把手教你用Pytorch实现CA注意力机制(附YOLOv4-tiny实战代码)

突破CBAM局限:用Pytorch实现CA注意力机制的全方位指南 在目标检测领域,注意力机制已经成为提升模型性能的标配组件。从早期的SE(Squeeze-and-Excitation)到后来的CBAM(Convolutional Block Attention Module&#xff0…...

如何在无向图中找出从任意节点可达的所有节点(连通分量识别)

...

Phi-3-mini-4k-instruct-gguf效果惊艳:在HumanEval Python代码生成任务中通过率超72%

Phi-3-mini-4k-instruct-gguf效果惊艳:在HumanEval Python代码生成任务中通过率超72% 1. 模型简介 Phi-3-Mini-4K-Instruct是一个38亿参数的轻量级开源模型,采用GGUF格式提供。作为Phi-3系列的一员,这个模型经过精心训练,展现出…...

别再只调包了!手把手带你用Python复现DeepSort核心匹配逻辑(附完整代码)

从零构建DeepSort匹配引擎:用Python实现多目标跟踪核心算法 多目标跟踪(Multi-Object Tracking, MOT)技术正在重塑我们对视频分析的认知边界。当您观看一段拥挤街道的监控视频时,能否想象计算机如何持续追踪数十个移动目标的轨迹并保持ID一致&#xff1f…...

Boss-Key老板键:终极窗口隐身术,5秒保护你的数字隐私空间

Boss-Key老板键:终极窗口隐身术,5秒保护你的数字隐私空间 【免费下载链接】Boss-Key 老板来了?快用Boss-Key老板键一键隐藏静音当前窗口!上班摸鱼必备神器 项目地址: https://gitcode.com/gh_mirrors/bo/Boss-Key 你是否经…...

Mplus链式中介实战:从模型设定到效应检验的完整指南

1. 链式中介模型入门:为什么你需要掌握这个分析工具 第一次接触链式中介模型时,我也和大多数研究者一样感到困惑。那是在分析组织行为学数据时,我发现简单的直接效应模型无法解释变量间复杂的传递机制。直到导师建议尝试链式中介分析&#x…...

Android Git客户端MGit:移动端代码管理的终极解决方案

Android Git客户端MGit:移动端代码管理的终极解决方案 【免费下载链接】MGit A Git client for Android. 项目地址: https://gitcode.com/gh_mirrors/mg/MGit 在移动开发时代,随时随地管理代码仓库已成为开发者的核心需求。MGit作为Android平台上…...

CANET-2E-U开发板透明socket开发实战:5分钟搞定CAN总线数据收发

CANET-2E-U开发板透明socket开发实战:5分钟搞定CAN总线数据收发 在工业自动化领域,CAN总线因其高可靠性和实时性成为设备通信的首选方案。但传统CAN开发往往需要复杂的驱动和专用API,让不少工程师望而却步。周立功推出的CANET-2E-U开发板通过…...

STM32 HAL库的SysTick心跳:从HAL_InitTick到HAL_Delay的完整链路解析与调试技巧

STM32 HAL库的SysTick心跳:从HAL_InitTick到HAL_Delay的完整链路解析与调试技巧 在嵌入式开发中,精确的时间控制往往是项目成败的关键。想象一下,当你精心设计的PID控制器因为微秒级的定时偏差而失去稳定性,或者通信协议因延时不准…...

如何用WeChatMsg永久保存你的微信聊天记忆:从数据备份到情感回顾的完整指南

如何用WeChatMsg永久保存你的微信聊天记忆:从数据备份到情感回顾的完整指南 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitH…...

深入浅出:从硬件原理图到DTS节点,图解RK3588外挂WiFi/蓝牙模块的驱动适配流程

从电路图到内核配置:RK3588外设驱动的硬件映射实战 当我们拿到一块RK3588开发板时,那些密密麻麻的电路图符号和内核中的设备树配置之间,到底存在着怎样的联系?这个问题困扰着许多从软件转向硬件开发的工程师。本文将以WiFi/蓝牙模…...

AI Agent平台架构设计与性能优化实践

1. AI Agent平台架构概述在当今技术环境中,AI Agent平台已经成为连接人工智能能力与实际业务需求的关键枢纽。这类平台不同于传统的单体AI应用,它需要同时解决模型管理、任务调度、资源分配和用户体验等多维度问题。一个典型的AI Agent平台通常包含三大核…...

从Nature子刊案例出发:如何用ChIP-seq+RNA-seq多组学联动,讲好一个调控机制的故事

解码多组学联动:从ChIP-seq到RNA-seq的科研叙事艺术 在《Nature Communications》那篇关于JMJD3与KLF4协同调控的经典论文背后,隐藏着一个更值得玩味的科学叙事框架——当表观遗传修饰遇上转录调控,如何通过多组学数据编织出令人信服的生物学…...

DS4Windows终极指南:5分钟让PS4/PS5手柄在Windows上完美运行

DS4Windows终极指南:5分钟让PS4/PS5手柄在Windows上完美运行 【免费下载链接】DS4Windows Like those other ds4tools, but sexier 项目地址: https://gitcode.com/gh_mirrors/ds/DS4Windows DS4Windows是一款免费开源的工具,专门解决PlayStation…...

制造业AI模型迭代与MLOps战略实践

1. 制造业AI模型成功的关键:迭代速度与MLOps战略在半导体工厂的激光钻孔车间里,几十台相同型号的设备正在高速运转。突然,3号机的振动传感器数据出现异常波动——这不是第一次了。上一次类似情况发生时,生产线被迫停工48小时&…...

研究生科研绘图有什么好用的工具

做科研这几年,我见过太多人把大半时间耗在了和实验无关的地方:改论文格式、找课题方向,还有最磨人的——画科研图。身边不管是青椒、博士生还是做基础研究的临床医生,吐槽起来都是同款心酸:要投顶刊,Figure…...

Hypnos-i1-8B惊艳效果:抽象代数概念解释+具体群论实例生成

Hypnos-i1-8B惊艳效果:抽象代数概念解释具体群论实例生成 1. 模型能力概览 Hypnos-i1-8B是一款基于量子噪声注入训练的8B参数开源大模型,专注于复杂逻辑推理和数学问题求解。该模型在抽象代数、群论等高等数学领域展现出令人惊艳的理解和生成能力。 1…...

告别臃肿库!用这个单头文件的minimp3,5分钟搞定嵌入式MP3播放

告别臃肿库!用单头文件minimp3在嵌入式设备实现MP3播放 在ESP32或STM32这类资源受限的嵌入式设备上播放MP3音乐,传统方案往往需要引入libmad、Helix等解码库,动辄占用几十KB的Flash空间。对于只有几百KB存储空间的物联网设备来说,…...

【Autosar MCAL实战】S32K14x WDG模块:从硬件原理到软件喂狗策略的深度解析

1. 看门狗基础与S32K14x硬件架构 在嵌入式系统中,看门狗(Watchdog Timer, WDT)就像一位严格的监工,时刻监督着程序的运行状态。当我在开发基于S32K146的电池管理系统时,深刻体会到这个"电子监工"的重要性——…...

VoiceFixer终极指南:让任何受损音频重获新生的AI声音修复神器

VoiceFixer终极指南:让任何受损音频重获新生的AI声音修复神器 【免费下载链接】voicefixer General Speech Restoration 项目地址: https://gitcode.com/gh_mirrors/vo/voicefixer 你是否曾为那些珍贵的录音感到遗憾?家庭录像中的背景噪音、历史档…...

【定位代码介绍】基于聚类算法的静止点RSSI多次采样定位(matlab代码)

对于静止点的RSSI定位,信号强度的漂移导致可以从时域方面入手,连续多次采集RSSI,定位后得到多个可能的点,聚类后,继续求平均(如果需要,也能改成加权平均,效果怎么样自行判断&#xf…...

阿里云国际站 LingduCloud零度云:高额返点,帮企业更省钱地走向全球

这几年,越来越多企业开始把业务往海外铺。可问题也很现实:想做全球化,成本不能太高,部署不能太慢,后续运维还不能太折腾。说白了,大家想要的不是“上云”两个字,而是花更合适的钱,把…...

手把手调试:在STM32上用Cortex-M3/4的SVC中断,一步步启动你的第一个RTOS任务

手把手调试:在STM32上用Cortex-M3/4的SVC中断,一步步启动你的第一个RTOS任务 当你第一次接触RTOS时,最令人困惑的莫过于理解操作系统如何从裸机环境过渡到多任务世界。本文将带你用STM32F103开发板和MDK环境,通过SVC中断实现这一神…...

SystemVerilog随机化避坑指南:从`rand`/`randc`到`std::randomize()`的实战踩坑记录

SystemVerilog随机化避坑指南:从rand/randc到std::randomize()的实战踩坑记录 在芯片验证领域,SystemVerilog的随机化功能是构建高效验证环境的核心工具。但许多工程师在从理论转向实践时,往往会遇到各种"反直觉"的行为——约束条件…...

双检时代不焦虑:百考通AI论文助手,科学应对查重与AIGC双重挑战

又到一年毕业季,对于广大毕业生而言,完成一篇符合学术规范的论文,其挑战已悄然升级。曾几何时,我们只需紧盯“重复率”这一项指标;而如今,随着各大高校和学术平台纷纷引入AI生成内容(AIGC&#…...

拉霸动画,老虎机滚动抽奖,cocos creator

核心功能 类似老虎机的滚动效果:当你抽奖时,会看到一列员工头像快速向下滚动,然后慢慢减速,最终停在抽中的结果上。 laba动画实现原理 1. 5格循环滚动池 - 显示区域始终只有5个格子(上下各2个,中间1个&…...

5个排位赛痛点,Seraphine如何帮你轻松解决?

5个排位赛痛点,Seraphine如何帮你轻松解决? 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine Seraphine是一款基于英雄联盟LCU API开发的免费开源战绩查询工具,它能帮你查询队…...

Bugly跨平台质量监控技术底座与科学评估实践

Bugly跨平台质量监控技术底座与科学评估实践 一、宏观背景与战略引入 在DataAI与多端融合加速推进的背景下,企业对应用质量的全局可观测性需求持续提升。IDC自2024年将《ITUO中国IT运维软件市场报告》升级为《ITAO中国智能运维软件市场报告》,聚焦AI在质…...