您的位置:首页 > 房产 > 家装 > 只有郑州人不知道郑州疫情多严重_新品发布会主题大全_网店推广实训系统_百度账号怎么改用户名

只有郑州人不知道郑州疫情多严重_新品发布会主题大全_网店推广实训系统_百度账号怎么改用户名

2025/3/11 2:10:38 来源:https://blog.csdn.net/weixin_42430947/article/details/146104695  浏览:    关键词:只有郑州人不知道郑州疫情多严重_新品发布会主题大全_网店推广实训系统_百度账号怎么改用户名
只有郑州人不知道郑州疫情多严重_新品发布会主题大全_网店推广实训系统_百度账号怎么改用户名

发生ERROR日志告警

查看系统日志如下:

java.lang.IllegalArgumentException: Illegal character in query at index 203: https://api.weixin.qq.com/sns/jscode2session?access_token=90_Vap5zo5UTJS4jbuvneMkyS1LHwHAgrofaX8bnIfW8EHXA71IRZwsqzJam9bo1m3zRcSrbgCsG-ydmu2HYWZiJEnR-jTzTKW&js_code=" OR (SELECT*FROM(SELECT(SLEEP(4)))uczk) limit 1#&secret=75c3afd41c5216fb652a00f3&grant_type=authorization_code&appid=wxf84e2db9e488888用户登录及注册失败-微信小程序 code:0evbf4ac2ml2slzSF2Ybxm6 err:错误代码:40029, 错误信息:code 无效,微信原始报文:{"errcode":40029,"errmsg":"invalid code, rid: 67cae4aa-724ecdd5-123302e1"}mdc:{"RequestId":""}timestamp:2025-03-07 20:20:58.557public class UserLoginReq {/*** 微信小程序appid*/@NotNull(message = "微信小程序appid不能为空")@Schema(name = "Appid", title = "微信小程序appid")private String appid;/*** 授权code  */@NotNull(message = "授权code不能为空")@Schema(name = "Code", title = "授权code")private String code;/*** 授权作用域*/@NotNull(message = "授权作用域不能为空")@Schema(name = "Scopes", title = "授权作用域")private Set<String> scopes;
}通过上述可以看出,渗透者通过调用登录接口请求参数,传递code参数值: OR (SELECT*FROM(SELECT(SLEEP(4)))uczk) limit 1
进行渗透测试;
需要加强对code参数的校验!

(SELECT*FROM(SELECT(SLEEP(4)))uczk) limit 1

以上代码是一个典型的 基于时间的盲注(Time-Based Blind SQL Injection) 攻击语句,常见于对数据库的渗透测试或恶意攻击中。

关键特征解析

  1. SLEEP(4) 函数

    • 在 MySQL 中,SLEEP(N) 会让数据库暂停执行 N 秒。攻击者通过观察页面响应时间是否延迟,间接判断注入是否成功(即使没有直接回显数据)。
  2. 子查询结构

    • (SELECT * FROM (SELECT SLEEP(4)) uczk)
      • 内层 SELECT SLEEP(4) 生成一个单行单列的结果(值为 0,因为 SLEEP 返回执行结果)。
      • 外层 SELECT * FROM (...) uczk 中的 uczk 是子查询的别名(避免语法错误)。
      • 该子查询的目的是确保语法正确性,同时触发时间延迟。
  3. OR 条件与 LIMIT 1

    • OR 用于绕过原有查询条件(如登录验证),将原查询逻辑变为永真(OR TRUE)。
    • LIMIT 1 确保只返回一行结果,避免因多行数据导致应用程序报错。

攻击原理

  • 盲注场景:当目标页面没有显式错误信息或数据回显时,攻击者通过时间差推断漏洞存在。
  • 执行过程
    1. 攻击者将恶意负载插入输入参数(如 URL、表单字段)。
    2. 后端数据库执行拼接后的 SQL 语句,触发 SLEEP(4)
    3. 若页面响应时间增加约 4 秒,则确认存在 SQL 注入漏洞。

防御建议

  1. 参数化查询(预编译语句)
    # 正确示例(使用参数化查询)
    cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
    
  2. 输入过滤与白名单
    • 对用户输入进行严格校验(如类型、长度、格式)。
  3. 最小化数据库权限
    • 避免使用高权限账户连接数据库,限制 SLEEP 等危险函数的使用。
  4. 监控与日志审计
    • 记录异常查询行为,及时告警长时间执行的 SQL 语句。

总结

该语句通过 SLEEP 函数制造时间延迟,属于典型的 基于时间的盲注,主要针对 MySQL 数据库。开发者需加强输入校验并使用参数化查询,从根本上杜绝此类攻击。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com