【Java代码审计】文件包含触发XSS漏洞

审计XSS的思路大多数都是先锁定评论区,有些情况下会被页面进行过滤或者转义,但仍可以通过文件包含达到触发XSS的目的。
输入XSS语句,并未直接触发弹框。


抓取请求包,访问的接口为”POST /comment_submit”


在代码中全局搜索字符串”/comment_submit”


该接口的实现代码是控制器类CommentController中的方法submit。而submit方法未对评论内容text进行参数校验以及过滤,就将Comment对象属性text的值赋值为变量text的值。第205行的CommentService.save接口的实现类对象的save方法调用Comment对象。


对接口CommentService的实现类CommentServiceImpl的save方法进行审计


该方法调用了“CommentDao接口的实现类的对象”的save方法,发现直接将Comment对象存进了数据库,为XSS漏洞的触发埋下了隐患。


可以看到数据库中确实存入了XSS,且没有被转义或过滤。


但事实也如开头介绍,前端并未进行弹框。


查看“pom.xml”,可知采用了模板引擎“Freemarker”


在jspxcms官网的相关文档中查看到Freemarker的转义相关的说明文档。


在D:\Code\JavaCode\jspxcms-9.0.0-release-src\src\main\webapp\template\1\default\info_news.html中发现了转义的写法。


通过分析可知info页面做了转义输出,阻止了XSS漏洞的触发。

但在D:\Code\JavaCode\jspxcms-9.0.0-release-src\src\main\webapp\template\1\default\sys_member_space_comment.html未发现转义的防护。


在源码中搜索sys_member_space_comment.html,发现sys_member_space.html包含了sys_member_space_comment.html。


在sys_member_space.html中找到关键代码,dang HTTP请求参数type的值等于comment时,就会动态引用sys_member_comment.html文件


继续寻找sys_member_space.html,发现其控制器类常量值SPACE_TEMPLATE就是sys_member_space.html


接着在源码中搜索常量SPACE_TEMPLATE


可知接口“GET /space/{id}”使用了模板,且参数id可控


输入http://localhost:8080/space/1?type=comment 成功触发XSS漏洞。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SQL注入漏洞的防护示例代码: 1. 使用预编译语句: ```java String sql = "SELECT * FROM users WHERE username = ? AND password = ?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, username); pstmt.setString(2, password); ResultSet rs = pstmt.executeQuery(); ``` 2. 对用户输入的数据进行过滤: ```java public static boolean isValidInput(String input) { String regex = "^[a-zA-Z0-9]+$"; Pattern pattern = Pattern.compile(regex); Matcher matcher = pattern.matcher(input); return matcher.matches(); } if (isValidInput(username) && isValidInput(password)) { String sql = "SELECT * FROM users WHERE username = '" + username + "' AND password = '" + password + "'"; Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql); } ``` 3. 使用ORM框架: ```java @Entity @Table(name = "users") public class User { @Id private Long id; private String username; private String password; // getter and setter } CriteriaBuilder builder = entityManager.getCriteriaBuilder(); CriteriaQuery<User> query = builder.createQuery(User.class); Root<User> root = query.from(User.class); query.where(builder.equal(root.get("username"), username)) .where(builder.equal(root.get("password"), password)); List<User> users = entityManager.createQuery(query).getResultList(); ``` XSS漏洞的防护示例代码: 1. 对用户输入的数据进行转义: ```java public static String escapeHtml(String input) { return StringEscapeUtils.escapeHtml4(input); } String username = request.getParameter("username"); String escapedUsername = escapeHtml(username); out.println("Hello, " + escapedUsername + "!"); ``` 2. 使用CSP: ```java response.setHeader("Content-Security-Policy", "default-src 'self'"); ``` 3. 设置HttpOnly标志: ```java Cookie cookie = new Cookie("username", "admin"); cookie.setHttpOnly(true); response.addCookie(cookie); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello_Brian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值