6.1 相关靶场


Day005_App应用

6.2 SQL 注入

6.2.1 JDBC

  • 常见问题

    1. 使用 Statement 方法拼接 SQL 语句,存在注入风险。

    2. PreparedStatement 会对 SQL 语句进行预编译,但若拼接 SQL 构造语句,预编译失效。

    3. JdbcTemplate(Spring 封装)若使用拼接语句,也会产生注入风险。

    4. 自定义过滤(黑白名单)可能不全面。

  • 安全写法

    • 使用 SQL 占位符 ? + PreparedStatement 预编译。

6.2.2 MyBatis

  • 参数符号

    • #{}:使用预编译(安全)

    • ${}:直接拼接 SQL(易注入)

  • 常见注入场景

    1. order by 注入:为解决 #{} 转字符串问题,部分研发使用 ${} → 注入。

    2. like 注入:模糊搜索时 %${q}% → 注入。

    3. in 注入:多 ID 查询使用 ${} → 注入。

6.2.3 Hibernate & JPA

  • 安全写法

    • setParameter 预编译(Hibernate)

    • username=:username 预编译(Hibernate/JPA)

6.2.4 Sql注入总结

  • 黑盒:直接发现和利用即可

  • 白盒

    1. 确定数据库通信技术

    2. 确定调用写法

    3. 检查写法是否安全(预编译)


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

  • 文件安全

  • 业务逻辑漏洞

  • 冷门漏洞(其他相似攻击)