
Java 代码审计快速找 SQL 注入白帽常用检索关键词摘要Java Web 项目是 SRC 平台 SQL 注入漏洞最常见的来源之一。完整通读全量源码效率太低白帽代码审计常用关键词检索快速定位风险代码片段再追溯参数可控性判断是否存在漏洞。本文整理 MyBatis、MyBatis-Plus、JDBC、JPA、原生拼接等场景下的检索关键词配套审计判断逻辑、漏洞判定流程、实战踩坑点。适合白帽挖洞、安全测试、开发自查代码。本文内容仅用于授权代码审计、安全学习禁止用于未授权系统渗透。免责声明本文技术内容仅用于网络安全学习、代码审计、授权范围内安全评估。未经目标系统所有者书面许可禁止对任何系统进行探测、渗透测试。违规操作带来的全部法律责任由操作者自行承担。0x00 前言很多新手做代码审计拿到源码包直接一行行阅读耗费大量时间效率极低。Java 项目 SQL 注入本质都是可控字符串直接拼接进 SQL 语句。我们不需要逐行读代码利用 IDE 全局搜索用关键词快速定位风险点再做参数溯源。核心审计逻辑关键词定位风险代码片段 → 追踪变量来源是否 HTTP 前端可控 → 校验是否有白名单 / 过滤 → 判断是否存在 SQL 注入注意检索关键词只能找到可疑代码不等于直接判定漏洞。关键词命中只是 “可疑”必须溯源入参。0x01 MyBatis XML 相关检索词XML 注入最高发MyBatis XML 是 Java 项目注入重灾区优先扫描 Mapper xml 文件。检索关键词${最核心关键词。${}代表字符串替换只要里面变量来自前端可控参数无白名单高危注入。审计重点${userName}、${tableName}、${sortField}。concat(用于拼接 SQL 字符串经常配合 ${} 使用也用于 DNSLog 注入场景。order by ${动态排序经典风险点前端传排序字段直接放入 ${}。from ${动态表名拼接分表场景常用极易注入。limit ${直接拼接分页参数高频漏洞点。审计判断规则${变量}变量来自前端 HTTP 请求参数无白名单校验 → 高危 SQL 注入${变量}变量后端硬编码 / 枚举固定值不接受前端输入 → 无风险小技巧IDEA 全局搜索时选择文件类型*.xml过滤 java 文件只扫描 Mapper。0x02 MyBatis-Plus 检索关键词QueryWrapper 系列坑MP 项目很多漏洞出现在链式调用优先检索下面这些方法。检索关键词.last(最高危直接追加 SQL 片段常用于 limit 拼接。重点看括号内是否有字符串拼接。危险示例.last(limit pageSize).apply(区分重载方法单字符串参数危险带{0}占位符多参数版本安全。危险.apply(usernamename).inSql(第二个参数为 SQL 子查询直接字符串拼接用户可控即注入。.orderByAsc(、.orderByDesc(参数为字符串变量时风险高Lambda 写法User::getXXX字段写死无此字段注入风险。.setSqlSelect(自定义查询字段可控字段名可注入。.groupBy(传入字符串变量拼接分组字段存在注入风险。审计判断规则只要.last()/.apply()内使用拼接外部传入变量且无白名单 → 高危。注意LambdaQueryWrapper 只是字段安全如果链式调用.last()漏洞依旧存在。0x03 原生 JDBC 检索关键词老项目、遗留系统老项目不用 MyBatis直接原生 JDBC 拼接 SQL注入大量存在。检索关键词Statementjava.sql.Statement非预编译拼接字符串直接执行 SQL高危。对比PreparedStatement是预编译安全。createStatement()创建 Statement 对象后续大概率拼接字符串执行 sql。executeQuery(执行查询看传入参数是否字符串拼接。executeUpdate(新增修改删除拼接 SQL 可产生增删改注入。select 、from 、where 、limit 直接字符串拼接 SQL 语句肉眼看到拼接变量就是重点。危险示例String sql select * from user where id id; stmt.executeQuery(sql);✅安全写法PreparedStatement使用占位符。0x04 JPA / Hibernate 检索关键词JPA 也会出现注入很多人误以为 JPA 安全。检索关键词createNativeQuery(原生 SQL 查询直接字符串拼接高危。createQuery(HQL 语句如果 HQL 字符串由用户输入拼接存在 HQL 注入。em.createNativeQueryEntityManager 原生 SQL 执行。注意使用参数绑定setParameter安全直接拼接字符串则危险。0x05 通用拼接关键词全项目通用检索适用于所有框架全局搜索 java 文件查找 SQL 字符串拼接。select update delete insert where and or limit order by 检索技巧双引号开头加号结尾代表 SQL 字符串和变量拼接。只要发现 SQL 字符串使用拼接外部变量直接标记可疑。0x06 入参溯源关键词判断参数是否前端可控找到可疑 SQL 拼接代码之后下一步判断变量来源检索这些关键词追踪入参RequestParamGetMapping、PostMappingRequestBodyHttpServletRequestgetParameterrequest.getParameter审计链路Controller 接口 → Service 层 → Mapper / 执行 SQL 代码看变量是否可以由 HTTP 请求直接控制。能从前端传参控制变量的值就是可控输入是漏洞成立的必要条件。0x07 完整审计流程白帽标准步骤全局检索上面关键词筛选可疑代码片段追踪变量来源向上跳转方法调用链看是否来自 Controller HTTP 入参检查中间是否有安全过滤、白名单校验白名单校验只允许预设值 → 无注入风险仅黑名单替换关键字过滤 and、or→ 可绕过依旧存在风险完全无过滤直接传入 SQL 拼接 → 高危 SQL 注入确认漏洞后构造 Payload 验证仅授权环境保存证据准备 SRC 提交。0x08 高频误报场景审计必看减少 SRC 误报变量是后端固定枚举、硬编码字符串前端无法修改 → 误报虽然使用 ${}但变量做了严格白名单校验 → 误报SQL 拼接变量经过强类型转换如强转为 Long 数字非法字符直接抛异常例Long id Long.valueOf(param)非数字直接报错无法注入。代码只是构造 SQL 字符串但是没有执行仅日志打印不会提交数据库执行 → 误报重点只检索关键词不能直接判定漏洞溯源参数可控性是关键。0x09 IDE 检索小技巧提升审计效率IDEA 全局搜索快捷键CtrlShiftF全局检索文件过滤XML 注入File mask*.xmlJava 代码注入File mask*.java排除目录node_modules、test测试目录减少无关结果正则检索可以使用正则匹配例如搜索\$\{.*\}匹配 ${} 内容。0x10 修复方案简要总结优先预编译MyBatis 使用#{}JDBC 使用 PreparedStatementMP 避免使用 last、无参 apply、inSql 拼接用户输入动态表名、排序字段场景后端严格白名单禁止直接拼接 SQL 字符串数据库账号最小权限。0x11 总结Java 代码审计找 SQL 注入核心思路是关键词检索 参数溯源不用通读全量源码重点关键词${、.last(、.apply(、createStatement、select 关键词命中只是可疑代码必须追溯变量是否来自前端 HTTP 可控参数区分误报变量后端固定值、白名单校验、强类型转换一般不存在注入熟练这套检索方式可以快速在源码中挖掘 SQL 注入是 SRC 白帽必备能力。最后关于网络安全技术储备网络安全是当今信息时代中非常重要的一环。无论是找工作还是感兴趣黑客都是未来职业选择中上上之选为了保护自己的网络安全学习网络安全知识是必不可少的。如果你是准备学习网络安全黑客或者正在学习下面这些你应该能用得上①网络安全学习路线②20份渗透测试电子书③安全攻防357页笔记④50份安全攻防面试指南⑤安全红队渗透工具包⑥网络安全必备书籍⑦100个漏洞实战案例⑧安全大厂内部视频资源⑨历年CTF夺旗赛题解析一、网络安全黑客学习路线网络安全黑客学习路线形成网络安全领域所有的知识点汇总它的用处就在于你可以按照上面的知识点去找对应的学习资源保证自己学得较为全面。二、网络安全教程视频我们在看视频学习的时候不能光动眼动脑不动手比较科学的学习方法是在理解之后运用它们这时候练手项目就很适合了。三、网络安全CTF实战案例光学理论是没用的要学会跟着一起敲要动手实操才能将自己的所学运用到实际当中去这里带来的是CTFSRC资料HW资料毕竟实战是检验真理的唯一标准嘛~四、网络安全面试题最后我们所有的作为都是为就业服务的所以关键的临门一脚就是咱们的面试题内容所以面试题板块是咱们不可或缺的部分这里我给大家准备的就是我在面试期间准备的资料。网安其实不难难的是坚持和相信自己我的经验是既然已经选定网安你就要相信它相信它能成为你日后进阶的高效渠道这样自己才会更有信念去学习才能在碰到困难的时候坚持下去。机会属于有准备的人这是一个实力的时代。人和人之间的差距不在于智商而在于如何利用业余时间只要你想学习什么时候开始都不晚不要担心这担心那你只需努力剩下的交给时间这份完整版的网络安全学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】