11.Base64 参数(JSON)嵌套字符串注入点模糊查询(括号边界)
Base64 参数(JSON)嵌套字符串注入点模糊查询是一种安全漏洞,通常出现在应用程序接受经过 Base64 编码的 JSON 格式参数,并将其作为模糊查询条件用于 SQL 语句中。攻击者可以通过注入特殊的 Base64 编码和 JSON 字符串来改变查询条件,绕过预期的过滤,导致数据泄露或非预期的查询结果。
#
示例代码:假设应用程序接受经过 Base64 编码的 JSON 格式参数,并使用以下后端查询语句执行模糊查询:
SELECT * FROM vulin_users WHERE (username LIKE '%a%') AND (age > 20);
#
攻击示例:假设攻击者将data
参数设置为以下 Base64 编码的 JSON 字符串:
#payload-1eyJuYW1lYjY0aiI6IicpIE9SIDE9MSAtLSJ9#payload-2eyJuYW1lYjY0aiI6IicgT1IgMT0xKSAtLSJ9
解码后的 JSON 字符串为:
#payload-1{"nameb64j":"') OR 1=1 --"}#payload-2{"nameb64j":"' OR 1=1) --"}/*payload-1的SQL语句*/select * from vulin_users where (username LIKE '%a') OR 1=1 --%') AND (age > 20);/*payload-2的SQL语句*/select * from vulin_users where (username LIKE '%a' OR 1=1) --%') AND (age > 20);
在这个恶意输入中,攻击者成功地在查询条件中添加了额外的条件 OR 1=1
,并用注释符号--
来注释掉后面的部分。这将导致查询忽略原本的条件 (age > 20)
,返回所有用户数据,因为 1=1
总是为真。
#
防御措施:为了防止 Base64 参数(JSON)嵌套字符串注入点模糊查询漏洞,应该始终使用参数化查询或预处理语句,不要直接拼接用户输入到 SQL 查询中,并对输入进行严格的过滤和验证。