深圳网站定制 开发,安徽平台网站建设制作,wordpress分类title,织梦 xml 网站地图二阶注入#xff08;Second-Order Injection#xff09;是一种特殊的 SQL 注入攻击#xff0c;通常发生在用户输入的数据首先被存储在数据库中#xff0c;然后在后续的操作中被使用时#xff0c;触发了注入漏洞。与传统的 SQL 注入#xff08;直接注入#xff09;不同Second-Order Injection是一种特殊的 SQL 注入攻击通常发生在用户输入的数据首先被存储在数据库中然后在后续的操作中被使用时触发了注入漏洞。与传统的 SQL 注入直接注入不同二阶注入并不会立即触发而是需要等到数据再次被调用时才会执行。
二阶注入的工作原理
注入数据存储攻击者将恶意的 SQL 注入代码作为普通数据输入存入数据库。由于在存储阶段数据库对输入数据进行了转义直接注入的攻击无法生效。二次调用触发在某些情况下应用程序会调用数据库中存储的数据并将其拼接到另一条 SQL查询中执行。此时原先存储的恶意代码将被解析从而引发 SQL 注入。
示例sqlilabs-less24POST-Second Oder Injections Real treat-Stored Injections
注册特殊用户
访问注册页面创建一个用户名为 admin’# 的用户密码可设为任意值。 此时数据库中会存储该用户名。
登录并修改密码
使用刚才注册的用户 admin’# 登录系统。 登录成功后进入修改密码页面。 在新密码字段中输入新的密码提交修改请求。 分析 SQL 语句 在修改密码的过程中应用程序可能执行如下 SQL 语句
UPDATE users SET passwordnew_password WHERE usernameadmin# AND passwordcurrent_password;
由于 # 在 SQL 中表示注释符号实际执行的语句变为
UPDATE users SET passwordnew_password WHERE usernameadmin;
这意味着数据库中用户名为 admin 的用户密码被修改为 new_password。
使用admin登录验证成功
使用用户名 admin 和新设置的密码登录系统验证成功。
二阶注入的常见场景
用户信息存储攻击者可以在注册时在用户名或其他字段中插入恶意 SQL代码。之后当管理员或系统在查询该用户数据时恶意代码可能会执行。应用日志记录在记录日志时存储了包含 SQL 注入代码的输入数据可能在日志回溯或展示时引发 SQL 注入。多步表单有时用户提交的数据在多步骤的表单中传递每一步都会使用数据库查询来验证或处理该数据。
防御二阶注入的建议
使用预处理语句在所有 SQL 查询中使用预处理语句Prepared Statements避免直接拼接用户输入。数据清理在插入和读取数据时都进行严格的输入验证和转义以确保不会执行恶意代码。编码和解码确保从数据库读取的数据没有被再次解码为 SQL 代码。严格的权限控制限制数据库用户的权限确保即便存在 SQL 注入攻击者的破坏性也受到限制。
总结
二阶注入相对隐蔽因为其恶意代码不会在第一步直接执行所以在开发和测试时务必要考虑输入数据在不同阶段的调用方式以避免此类攻击。