审计工具
java审计:推荐jd-GUI作为审计工具
php审计:seay源代码审计系统
字符串的搜索
正则
大多数时候,SQL查询只是传递给数据库处理字符串,如果我们想要检查网站中是否存在SQL注入,需要分析程序中使用的SQL注入手段,查看是否存在漏洞,我们可以使用正则表达式快速查询
| 正则表达式 (Query / Pattern) | 中文描述 (Description) | 功能与用途解释 |
|---|---|---|
(SELECT|UPDATE) 或 (SELECT|UPDATE|INSERT|DELETE) | 搜索包含 SELECT 或 UPDATE 等 SQL 关键词的行 | 用于快速定位代码中硬编码的 SQL 语句开头。 |
(WHERE|VALUES).*?" | 搜索包含 WHERE 或 VALUES 且后续跟有双引号的字符串 | 用于查找 SQL 拼接语句中,条件子句(如 WHERE id = )与字符串结束引号之间的关联。 |
(WHERE|VALUES).*"\+ | 搜索包含 WHERE 或 VALUES 并且使用 + 进行字符串拼接的代码 | 重点排查 Java 等语言中使用字符串加号 + 动态拼接 SQL 的高危注入点。 |
.*sql.*" | 搜索包含 sql(不区分/区分大小写)且后续带有双引号的行 | 快速查找定义 SQL 变量或 SQL 局部字符串的代码行。 |
字符串查找
grep -irnE 'SELECT|UPDATE|DELETE|INSERT|CREATE|ALTER|DROP'
Vscode全局搜索
有时候使用Vscode可以快速查找特殊字符串,相比于grep更加直观
针对Java的审计方法
特殊字符串
审计 Java 项目时,首先需要通过全局搜索关键字定位所有与数据库交互的代码点:
| 框架 / 技术 | 搜索关键字 (Pattern) | 审计重点 / 危险场景 |
|---|---|---|
| JDBC (原生) | Statement / executeQuery | 使用 Statement + 字符串拼接(+ 或 String.format)必存在注入。 |
| JdbcTemplate | jdbcTemplate / query / execute | 检查传入的 SQL 是否通过 + 拼接变量,而非使用 ? 占位符。 |
| MyBatis | \${.*} | 核心重点:#{} 使用预编译(安全),而 ${} 是直接拼接(危险,易在 ORDER BY、LIKE、IN 中出现)。 |
| Hibernate / JPA | createQuery / createNativeQuery | 检查 HQL 或 Native SQL 中是否使用了字符串拼接而非注入参数(如 :param)。 |
字符串过滤
Java中有属于自己的过滤语法,了解这些过滤语法,有助于审计Java网页
Pattern / Matcher 正则匹配
Java原生库。常用于定义黑名单过滤或格式检验
Pattern.compile(regex):定义正则黑名单或匹配规则