6.1 相关靶场
6.2 SQL 注入
6.2.1 JDBC
-
常见问题
-
使用
Statement方法拼接 SQL 语句,存在注入风险。 -
PreparedStatement会对 SQL 语句进行预编译,但若拼接 SQL 构造语句,预编译失效。 -
JdbcTemplate(Spring 封装)若使用拼接语句,也会产生注入风险。 -
自定义过滤(黑白名单)可能不全面。
-
-
安全写法
- 使用 SQL 占位符
?+PreparedStatement预编译。
- 使用 SQL 占位符
6.2.2 MyBatis
-
参数符号
-
#{}:使用预编译(安全) -
${}:直接拼接 SQL(易注入)
-
-
常见注入场景
-
order by注入:为解决#{}转字符串问题,部分研发使用${}→ 注入。 -
like注入:模糊搜索时%${q}%→ 注入。 -
in注入:多 ID 查询使用${}→ 注入。
-
6.2.3 Hibernate & JPA
-
安全写法
-
setParameter预编译(Hibernate) -
username=:username预编译(Hibernate/JPA)
-
6.2.4 Sql注入总结
-
黑盒:直接发现和利用即可
-
白盒:
-
确定数据库通信技术
-
确定调用写法
-
检查写法是否安全(预编译)
-
6.3 XXE 注入
6.3.1 常见函数
-
XMLReader.parse -
SAXParser.parse -
审计函数:
XMLReader, SAXReader, DocumentBuilder, XMLStreamReader,
SAXBuilder, SAXParser, SAXSource, TransformerFactory,
SAXTransformerFactory, SchemaFactory, Unmarshaller, XPathExpression
6.3.2 总结
-
获取适用上述 12 类函数
-
parse处理的变量是否可控 → 漏洞点
6.4 RCE(远程代码执行)
-
常见触发类/方法:
-
ProcessBuilder -
Runtime.getRuntime().exec() -
ProcessImpl -
GroovyShell
-
6.5 SSRF(服务器端请求伪造)
-
可控类/方法:
URL
6.6 URL 跳转
-
Spring MVC:
-
ModelAndView+ redirect -
ResponseEntity.setHeader
-
-
原生 Servlet:
HttpServletResponse.sendRedirect
-
总结:
-
关注技术栈实现源码
-
查看类/函数触发可控变量
-
6.7 其他漏洞
-
XSS、CSRF
-
文件安全
-
业务逻辑漏洞
-
冷门漏洞(其他相似攻击)