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

SQL注入漏洞

免责声明:本文仅用于网络安全学习与研究,所有漏洞测试必须在得到明确授权的情况下进行。未经授权的渗透测试行为是违法的,请遵守法律法规。

一、什么是SQL注入?一句话讲明白

SQL注入= 用户传的参数没经过严格检查,直接拼接到SQL语句里,导致坏人可以篡改SQL命令

打个比方:

• 正常情况:你去银行取钱,柜员问你取多少,你说"取1000",柜员照办
• SQL注入:坏人说"取1000,顺便把所有人的钱都转到我账户",柜员没检查,直接执行了

就这么简单!核心就是用户输入的东西被当成了SQL命令执行


二、SQL注入有什么危害?

危害等级具体危害大白话解释
⭐⭐⭐泄露数据库数据把用户账号、密码、订单全偷了
⭐⭐⭐⭐破坏数据库删库跑路,数据全没了
⭐⭐⭐⭐⭐控制服务器直接拿下服务器,想干嘛干嘛

所以SQL注入被评为"Web漏洞之王"不是没有道理的!


三、怎么学习SQL注入?

学习SQL注入,按这个顺序来:

1.漏洞产生的原因(原理)—— 先搞懂为什么会有这个漏洞
2.危害—— 知道它能干什么
3.怎么挖掘—— 黑盒测试、白盒测试
4.怎么利用—— 拿到漏洞后怎么搞数据
5.怎么修复—— 开发怎么防
6.怎么绕过拦截—— 进阶技巧


四、怎么发现SQL注入漏洞?

方法一:代码审计(白盒测试)

白盒就是能看到源代码,找起来最准。

三步走

步骤做什么通过条件
第1步定位SQL语句,找有没有可控变量
第2步看变量有没有被过滤没有
第3步看变量是不是从前端传来的

三个条件都满足 = 一定有SQL注入!

就这么简单,白盒测试找SQL注入就看这三点。

方法二:漏洞挖掘(黑盒测试)

黑盒就是看不到源码,只能靠猜和试。

两种方式

1.扫描器扫—— 用工具扫所有参数(快但不准)
2.手工测—— 手动测试和数据库有交互的参数(慢但准)

怎么判断哪些参数可能有注入?

很简单:凡是跟数据查询有关的功能,都可能有注入!

• 成绩查询?有!
• 商品搜索?有!
• 用户登录?有!
• 订单查询?有!

只要是需要"查数据库"的地方,都有可能!


五、6种测试闭合的方法(重点!)

找到可疑参数后,怎么确认有没有SQL注入?用下面6种方法!

方法一⭐:引号测试闭合

原理:加个引号,看会不会报错。

正常: ?id=1 测试: ?id=1' (单引号) ?id=1" (双引号)

判断方法

• 加单引号报错,加双引号不报错 →单引号闭合,可能有注入!
• 加双引号报错,加单引号不报错 →双引号闭合,可能有注入!

举个例子

假设后端SQL是这样的:

SELECT name, score FROM students WHERE student_id = '$student_id' limit 0,1;

id=1'后,SQL变成:

SELECT name, score FROM students WHERE student_id = '1'' limit 0,1;

看到没?多了一个单引号,语法错了,就报错了!

为什么报错就可能有注入?
因为报错说明你的输入真的被拼到SQL里了!如果输入被过滤了,就不会报错。

方法二⭐:and测试

前提:你得知道一个正确的值

正常: ?id=20210101 (正常显示) 测试正常: ?id=20210101' and 1=1# (还是正常显示) 测试异常: ?id=20210101' and 1=2# (不显示了)

原理

and 1=1两边都是真,所以SQL正常执行,页面正常显示
and 1=2一边真一边假,所以SQL查不到数据,页面不显示

如果加不加and 1=1页面都一样,说明很可能有SQL注入!

#是MySQL的注释符,意思是"后面的内容都不算了"

方法三⭐:or测试

适用场景:不知道正确值的时候用

测试: ?id=-1' or 1=1#

原理

-1是个不存在的值,正常查不到
or 1=1是永远成立的条件
• 加在一起就变成了"查id=-1的,或者1=1的",因为1=1永远成立,所以能查到所有数据

⚠ 慎用!or测试可能会查出整张表的数据,影响比较大,尽量用and测试。

方法四⭐:不加注释符闭合测试

有些情况注释符被过滤了怎么办?不用注释符也行!

正确值测试: ?id=1' and 1='1 错误值测试: ?id=-1' or 1='1

原理:用单引号自己闭合,就不用注释符了。

假设原SQL是:

SELECT * FROM users WHERE id = '$id'

id=1' and 1='1后:

SELECT * FROM users WHERE id = '1' and 1='1'

看到没?两边的单引号都对上了,完美闭合!

MySQL的注释符有两种:#--(注意--后面有个空格)

方法五⭐:sleep测试(盲注用)

适用场景:页面不报错也不显示,啥都看不到的时候

测试: ?id=1' and sleep(5)#

原理

sleep(5)意思是"睡5秒钟"
• 如果页面延迟了5秒才加载出来,说明有注入!
• 如果页面秒开,说明没有注入

这个方法很管用,因为不需要看页面内容,只需要看加载时间就行。

方法六⭐:order by测试

测试: ?id=1' order by 999#

原理

order by 999意思是"按第999列排序"
• 一般的表哪有999列啊,所以肯定报错
• 一报错就说明闭合方式是对的,可能有注入!


六、SQL注入怎么利用?(联合查询注入)

确认有注入后,怎么拿数据?最经典的就是联合查询注入

联合查询(union query)= 把两个SELECT语句的结果拼在一起,一起显示出来

打个比方:

• 正常查询:查学生成绩
• 注入查询:查学生成绩 + 查管理员密码
• 联合起来:两个结果一起显示在页面上

前置知识:information_schema

MySQL里有个很重要的数据库叫information_schema,它里面存了所有数据库的元信息

表名存了什么作用
schemata所有数据库名查有哪些数据库
tables所有表的信息查某个库里有哪些表
columns所有列的信息查某个表里有哪些字段

这个库是SQL注入的"字典",拿数据全靠它!


七、联合查询注入四步走

第1步:判断查询结果的列数

用 order by 猜

?id=-1' order by 999# (报错,说明没有999列) ?id=-1' order by 1# (正常,说明至少有1列) ?id=-1' order by 2# (正常,说明至少有2列) ?id=-1' order by 3# (报错,说明没有3列)

结论:查询结果有2列

💡小技巧:用-1而不是正常值,是因为正常值会返回数据,把我们注入的结果挤掉。用-1(不存在的值),原查询查不到东西,就只会显示我们注入的内容。

第2步:判断回显位

知道有几列后,用 union select 看哪一列会显示在页面上:

?id=-1' union select 1,2#

如果页面显示了12,说明两列都会显示。
如果只显示了2,说明只有第2列是回显位。

回显位= 数据会显示在页面上的位置,我们把要查的数据放这里就行。

第3步:用函数获取基础信息

把回显位替换成MySQL函数,获取数据库的基本信息:

函数作用示例
version()获取MySQL版本5.7.26
user()获取MySQL用户名root@localhost
database()获取当前数据库名test_db
@@basedir获取MySQL安装路径/usr/local/mysql

示例

?id=-1' union select version(),2#
💡SRC挖洞提示:如果是挖SRC漏洞,到这一步就可以了!能证明有注入就行,不用往下拖库。

第4步:获取数据

重头戏来了!怎么把数据库里的数据全拖出来?

第一步:获取所有数据库名
?id=-1' union select schema_name,2 from information_schema.schemata#

information_schema.schemata表里存了所有数据库的名字。

⚠ 常见问题:显示不完整怎么办?

有时候数据库太多,页面显示不全,两种解决方法:

解决方法1:group_concat 聚合函数

?id=-1' union select group_concat(schema_name),2 from information_schema.schemata#

group_concat()的作用:把多行数据合并成一行,用逗号隔开。这样一整行就能显示所有数据库名了。

解决方法2:limit 分页

?id=-1' union select schema_name,2 from information_schema.schemata limit 0,1# (第1个) ?id=-1' union select schema_name,2 from information_schema.schemata limit 1,1# (第2个) ?id=-1' union select schema_name,2 from information_schema.schemata limit 2,1# (第3个)

limit 2,1的意思:从第2行开始(不包括第2行),取1条结果。也就是取第3条。

注意:MySQL是从0开始数的,第1条是0,第2条是1,以此类推。

八、获取表名和字段名

拿到数据库名后,继续拿表名和字段名。

获取表名

?id=-1' union select group_concat(table_name),2 from information_schema.tables where table_schema='数据库名'#

获取字段名

?id=-1' union select group_concat(column_name),2 from information_schema.columns where table_name='表名'#

获取具体数据

?id=-1' union select username,password from 表名#

九、Linux环境补充:文件上传与解压

课程里还提到怎么把Windows的文件传到Linux里并解压:

# 解压zip文件 unzip 文件名.zip

十、总结速查表

SQL注入判断方法

方法适用场景原理
引号测试快速判断加引号看会不会报错
and测试有正确值and 1=1正常, and 1=2异常
or测试无正确值or 1=1 返回所有数据
无注释闭合注释符被过滤用引号自己闭合
sleep测试盲注(无回显)看页面延迟时间
order by测试通用大数字排序会报错

联合查询步骤

步骤做什么示例
1猜列数order by N
2找回显位union select 1,2,3
3拿基础信息version()、user()、database()
4拿数据库名information_schema.schemata
5拿表名information_schema.tables
6拿字段名information_schema.columns
7拿数据select 字段 from 表

最后说几句

SQL注入的核心就一句话:用户输入的参数被直接拼到SQL里了。

学习建议

1.先搞懂原理,别上来就背payload
2.多在靶场里练,比如sqli-labs
3.理解每一步为什么这么做,而不是死记硬背
4.挖到SRC漏洞点到为止,别拖库

记住:技术是把双刃剑,用在正途上是保护网络安全,用在歪路上就是违法犯罪!


学习路线提醒:这是SQL注入的第一篇,讲的是最基础的显错注入(联合查询)。后面还有报错注入、盲注、堆叠注入等等,一步一步来,先把基础打牢!
http://www.jsqmd.com/news/1075702/

相关文章:

  • 支持合规二创的AI Remix音乐工具实操分享
  • 好物工具推荐|一站式电商活动查询站点分享
  • 如何理解 CDN 的加速原理?
  • 2026年AI论文写作软件深度评测:6款工具专业水准得分排名
  • Outfit字体:9种字重的开源几何无衬线字体如何重塑现代设计系统
  • P89LPC93xx微控制器I2C与SPI通信协议实战详解与驱动开发
  • 企业级AI编排:MuleSoft+LangChain构建稳态AI调度中枢
  • 苹果端侧AI实战:分层智能架构与Core ML深度优化指南
  • 2026年PE薄膜行业新趋势:哪家企业更值得信赖?
  • 3步构建高性能视频超分辨率应用:Video2X Qt6界面开发完整指南
  • Gmail邮箱批量生成终极指南:5分钟解锁Python自动化黑科技
  • ChatGPT Plus账号支持多人共享吗?多人使用账号的3种主流方法对比
  • SolidWorks_曲线与曲面设计2_投影曲线应用
  • 在线测速与本地 ping 的本质区别
  • 苹果Siri系统级LLM重构:端侧大模型与隐私优先架构解析
  • 【共创季稿事节】 鸿蒙原生 ArkTS 布局实战:Tabs + animateTo 实现页面切换过渡动画
  • AI 能合法“二创“周星驰经典了?聊聊 Seedance 2.5 背后的版权新玩法
  • TIDAL Downloader Next Generation终极指南:轻松获取24-bit高解析度无损音乐
  • Syncthing跨平台部署终极指南:3步实现安全文件同步
  • 跨境搬迁智能导航系统:行政流程语义编排引擎设计
  • 中望CAD机械版安装步骤(附安装包)中望CAD机械版2026 下载安装教程(图文步骤)
  • RedNotebook:一款强大易用的跨平台日记应用,助你轻松管理个人知识
  • MC9RS08LE4 ADC低功耗配置:停止模式下ADACK时钟唤醒与精度优化
  • 轻松搞定论文:6款2026年靠谱AI写论文工具深度横评
  • 干了8年Java,我才把这些并发工具捋明白(实战血泪总结)
  • LSTM股票波动率与价格区间预测实战指南
  • Cloudflare开源的cloudflared,不碰防火墙就能暴露内网服务
  • 2026制造业质量管理实战:工程图纸自动化识别与检验计划生成指南
  • 公考备考资料太多怎么选?粉笔适合做主线学习工具吗
  • 智谱GLM-5.2与万亿港元市值:国产大模型首个破万亿港元的资本市场里程碑