Java代码审计-XSS漏洞

admin 2023年4月27日18:12:47评论96 views字数 1437阅读4分47秒阅读模式

0x01 前言

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript。xss本质上就是浏览器执行了域外的代码,出现的场景比较多,需要具体情况具体分析

0x02 反射型xss

    @RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
return xss;
}

可以看到代码中设定参数值没有经过任何过滤访问直接返回到页面中
payload:xss=<script>alert(/xss/)</script>

Java代码审计-XSS漏洞

0x03 存储型xss

存储型xss就是把我们嵌入的js代码存储到数据中,然后通过访问数据库的功能点然后造成xss,所以它相比反射型xss更持久危害更大

    @RequestMapping("/stored/store")
@ResponseBody
public String store(String xss, HttpServletResponse response) {
Cookie cookie = new Cookie("xss", xss);
response.addCookie(cookie);
return "Set param into cookie";
}

这里用cookie来模拟下存储型xss,设定一个参数值把它写到cookie中,然后我们再通过以下路由去取这个值然后返回到页面中来

    @RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
return xss;
}

payload:http://localhost/xss/stored/store?xss=%3Cscript%3Ealert(/xss/)%3C/script%3E
Java代码审计-XSS漏洞
访问路由/stored/show,触发xss
Java代码审计-XSS漏洞

0x04 漏洞修复

自定义函数,过滤<>等敏感字符

  @RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
return encode(xss);
}
    private static String encode(String origin) {
origin = StringUtils.replace(origin, "&", "&amp;");
origin = StringUtils.replace(origin, "<", "&lt;");
origin = StringUtils.replace(origin, ">", "&gt;");
origin = StringUtils.replace(origin, """, "&quot;");
origin = StringUtils.replace(origin, "'", "&#x27;");
origin = StringUtils.replace(origin, "/", "&#x2F;");
return origin;
}

0x05 其它

xss的利用手段主要是网络蠕虫攻击和窃取用户cookie信息。xss蠕虫通过漏洞点嵌入恶意的js代码,执行代码后,就会添加带有恶意代码的页面或DOM元素,从而进行传播。而如果盗取cookie信息,常见的就是进行跨域请求的问题。

原文始发于微信公众号(亿人安全):Java代码审计-XSS漏洞

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年4月27日18:12:47
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Java代码审计-XSS漏洞https://cn-sec.com/archives/1695274.html

发表评论

匿名网友 填写信息