大家好,我是 Kali 与编程讲师老 K,B 站和网易云课堂讲师,专注 Kali 教学,致力于帮助小白轻松学会 Kali 与编程,接下来你将分清《SQL 注入 VSNoSQL 注入》
很多刚用 Kali 入门渗透的小白,总把两类注入混为一谈,拿 SQL 单引号 payload 去测 Mongo 接口没效果就判定站点安全,漏掉高危漏洞,下面用生活化例子 + 实操细节讲清核心区别,零基础也能听懂。
先讲SQL 注入,针对 MySQL、Oracle 这类关系型数据库,数据以行列规整表格存储,依靠结构化 SQL 语句完成查询。举个生活例子:学校后勤系统用 SQL 查学生信息,后台语句是select * from student where name='用户输入姓名',攻击者在姓名输入框输入' or 1=1-- ,单引号闭合原有字符串、改写逻辑,语句变成查询所有学生数据,就像报名字时附加一句 “全体放行”,骗过核验拿到全部资料。日常登录框、搜索页、留言板是高发点位,经典 payload 包含单引号、union、and/or 等 SQL 关键字,Kali 里能用 sqlmap 自动化扫描、抓包重放快速验证,常伴随数据库报错回显,容易被初步识别;但前提是用户输入直接拼接入 SQL 语句,没做过滤转义,才会被利用。
再讲NoSQL 注入,针对 MongoDB、Redis 等非关系型数据库,数据以文档、键值对形式存储,不用 SQL 语法,靠 JSON 格式参数、专属操作符执行查询,注入逻辑完全不同。沿用校园例子,改用 Mongo 做学生查询时,后台接收 JSON 参数{"name":"用户输入"},攻击者传入{"name":{"$gt":""}},利用$gt大于操作符匹配所有非空姓名,批量获取学生信息,不是篡改语句语法,而是嵌套特殊操作符改写查询匹配规则,相当于绕开点名,用后台指令要求列出全部人员。这类注入没有单引号闭合特征,sqlmap 无法识别,常出现在接口 JSON 传参、商品筛选、用户信息查询页面,大多无明显报错,流量看起来和正常请求差异小,隐蔽性更强,需要用 Burp 改请求体、curl 构造 JSON 参数测试,新手极易忽略。
核心差异拆解:其一底层逻辑与语法载体,SQL 注入破坏 SQL 语句结构,依赖引号、SQL 关键字;NoSQL 注入滥用数据库专属操作符(\(where、\)regex、$ne 等),篡改查询对象结构,和 SQL 语法无关。其二适用数据库与场景,前者面向表结构关系库,传统 Web 站点、老旧管理系统多发;后者面向文档 / 键值库,前后端分离、用 Mongo/Redis 做用户中心的新项目常见。其三工具特征与排查难度,SQL 注入易报错、自动化工具成熟;NoSQL 注入静默度高、无通用扫描工具,需人工抓包分析参数结构,WAF 常误判为正常请求。
新手实操踩坑非常普遍:不少学员用 Kali 做测试,输单引号没报错就终止测试,后续才发现被 NoSQL 注入拖走手机号、账号密码;还有人当成弱密码反复爆破账号,浪费大量时间。正规测试要先通过页面、接口响应、技术文档判断后端数据库类型,前期先用被动情报确认资产,再针对性构造 payload,比如尝试{"username":{"$ne":null}}绕过登录校验,观察返回用户数量、权限变化,不要照搬 SQL 注入思路。
曾遇到学员复盘案例:小型电商后台用 Mongo 存储会员数据,开发只过滤了特殊符号,没拦截 Mongo 操作符,学员一开始用 sqlmap 扫描无结果,手动修改 POST JSON 参数后,直接遍历出上千条会员信息,就是混淆两类注入、依赖单一工具导致前期排查遗漏。开发防护上,SQL 注入优先做参数预编译、输入转义;NoSQL 注入要过滤请求内 $ 开头操作符、校验参数数据类型、限制查询返回条数,不能套用一套过滤规则。
两类注入本质根源一致:用户可控输入未做严格校验过滤,被篡改查询逻辑实现越权访问、数据窃取甚至服务器提权,只是利用路径、表现形式天差地别。理清边界后,在 Kali 实操中分层测试、按需选方法,才能精准发现漏洞,避免无效测试和漏报,同时必须严守合规底线,仅在授权演练环境练习。
讨论话题:测试 Web 接口遇到注入迹象,你优先用 sqlmap 自动化扫描,还是手动改 JSON / 参数排查 NoSQL 注入?
关注我,每天学习 Kali 知识。回复:软件,领 500 款 kali 配套软件。
免责声明:仅教学演示,未授权测试违法,请勿私自操作公网目标
点击阅读原文,学习黑客入门《Kali与编程最全课》