mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
1042 字
4 分钟
SQLi防御绕过指南
2026-06-09

📓 模块二:【Obsidian 笔记模板】——《SQLi 防御迷宫突围指南》 🎨 设计原则:视觉呼吸感 + 情境化记忆 + 3秒定位关键点 ✅ 已适配 Obsidian 的 callout / tag / graph view ,支持双向链接 📁 文件名: 现代靶场防御突围 SQLi/03_ .md markdown 复制引用 > [!NOTE] 🌟 今日战况(2025-01-31) > - ⚔ 对手:study.target.example.com/vuln.php`

  • 🛡 防御类型:PHP 层语句级黑名单(非 WAF!) > - 🔒 拦截规则: > - 单 引号 ' → 立即 die > - 任何字⺟(a-z/A-Z)→ 触发关键词扫描 > - 函数名(upd atexml/length/if/sleep)→ 无论位置全杀 > - ✅ 唯一通路:**纯数字/十六进制数字串
  • 无字⺟ payload** --- ## 🗺 三重防御地图(可视化记忆) ```mermaid graph LR A [输入] —> B{PHP 层扫描} B —>|含 ’ 或 字⺟| C[“狂 SQL Syntax Error!”] B —>|纯 数字/十六进制数字| D[拼接到 SQL] D —> E[MySQL 执行] E —> F[回显 or 报错]💡 记忆口诀: “单引号是雷,字⺟是墙; 数字是⻔,hex 是钥匙” 🧰 三大突围战术(附实测状态) 战术 原理 今日结果 明日优化建议 Hex 无前缀注入 传 3127 而非 0x3 ❌ 未试 ✅ 优先测试 id=312 127 ,避免被当字符 7 → id=31272041 串 4E44... 反引号逃逸 绕过关键词 ⏳ 待测 用 %60 URL 编码 匹配(如 1 AND“) 60

Null Byte 截断 %00 让后端提前终 ⏳ 待测 组合: 1%00’ AND 止检测 1=1 🧠 高阶认知补丁(防遗忘) [!TIP] 为什么老靶场能过,这里不行? ● 老靶场:WAF 只拦 UNION SELECT → 你用 updatexml 就赢了 ● 新靶场:开发者亲手写了 if (preg_match(’/[a-zA-Z]/’, $id)) die() → 这不是“版本高”,是教学靶场故意升级难度,逼你学真本事! [!WARNING] 别再试 database() ! 它本质是 函数调用 → 在 PHP 层就被当成“危险代码”干掉。 正确思路:让 MySQL 自⼰执行函数,而不是 PHP 拼接时看到函数名。 📦 附件(拖入 Obsidian 即用) ● payload_hex_generator.py :一键生成 hex payload(支持 updatexml / union / blind) ● defense_map.png :三色防御层级图(红=应用层,⻩=WAF,绿=DB) ● cheat_sheet.md :10 条“无字⺟注入”速查(含反引号、宽字节、JSON 绕过) 复制引用 ```> ✨ 阅读体验设计: > - 每段 ≤ 3 行,留白充足 > - 关键词用 **加粗**

  • 🎯/⚠/ ✅ 图标引导视线 > - 用 > [!NOTE] callout 替代传统标题,减少视觉压迫 >
  • Mermaid 图表自动渲染(Obsidian 插件支持) --- ## 🧬 模块三:【AI 知识库快照】—— 供下一位 AI 无缝接手 > 📦 格式:YAML + 自然语言摘要,确保「零上下文丢失」 ```yaml

AI_Knowledge_Snapshot_v20250131 target: url: “http://study.target.example.com/v#

uln.php” vuln_type: “SQL Injection (Blind/Union Blocked)” defense_laye r: “PHP Application-Level Keyword Blacklist” confirmed_triggers: - sin gle_quote: ”’” - any_letter: “[a-zA-Z]” - function_names: [“updatexm l”, “length”, “substr”, “if”, “sleep”, “database”] working_inputs: - “123” # pure digits → SUCCESS - “0x3127” # hex string → treated as lite ral, but no injection yet - "" # empty → returns empty SQL (safe) 61

failed_payloads: - “1’ AND 1=1—” → “狂 SQL Syntax Error!” - “1’ AN D updatexml(…)” → same error - “1’ AND length(database())=8” → same er ror hypothesis: - Backend likely uses: id=id = _GET[‘id’]; if (strpos(id,"")!==falsepregmatch(/[azAZ]/,id, "'") !== false || preg_match('/[a-zA-Z]/', id)) { die(“狂 SQL Syntax Error: You tried to break it!”); } sql="SELECTFROMusersWHEREid=sql = "SELECT * FROM users WHERE id = 'id’”; - No WAF active (confir med via宝塔未启用) next_steps_priority: 1. Test id=3127 (no 0x prefix) → check if hex digits bypass letter filter 2. Test id=1%5C’ (%5C = $ → e xploit addslashes() truncation 3. Test id=1AND1=1 → backtick bypass owner_status: “Paused for rest (2025-01-31 21:00), resume 2025-02-01 09:0 0” knowledge_tags: [sql-injection, php-filter, hex-bypass, ctf-target, edu cation]``` 🤖 下一位 AI 读此快照后,可立即说: “收到!当前靶场是 PHP 层字⺟黑名单,已确认 62

��_PHP关键词黑名单模式 🧩 模式名称: PHP-Level Keyword Blacklist 当开发者手写过滤而非用 PDO/prepare 时,常⻅于教学靶场 📌 特征指纹 报错信息含中文(如“狂 SQL Syntax Error”) ● ● id=1 成功, id=a 失败 ● id=0x31 成功, id=0x61 失败 函数名无论位置、大小写、拼写错误均被拦截 ● 🛠 应对策略 策略 原理 适用条件 Hex 无前缀 绕过字⺟检测 后端未做 hex2bin 反斜杠截断 利用 addslashes 逻辑漏洞 id=addslashes(id = addslashes(_GET [‘id’]) JSON 注入 id={“id”:“1’”} → 若后 较少⻅但致命 端 json_decode 后拼接 💡 记住:这不是 WAF,是“开发者恐惧症”的产物。 63

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

SQLi防御绕过指南
https://lansame.top/posts/sqli-bypass/
作者
Lansame
发布于
2026-06-09
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录