freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Java代码审计之XSS
2022-07-10 20:17:13
所属地 福建省

漏洞原理

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。

反射型xss

为了让我们方便理解,这里没有使用其他花里胡哨的html页面

@RequestMapping("/reflect")
@ResponseBody
publicstaticStringreflect(Stringxss) {
returnxss;
}

payload

xss=<script>alert(1)</script>

return将这个变量返回到html,导致了XSS漏洞可以看到最后执行了js代码,实现了弹窗。

1657455296_62cac2c00d4d36783a5b9.png!small

存储型xss

攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型XSS的危害会更大。因为存储型XSS的代码存在于网页的代码中,可以说是永久型的。

@RequestMapping("/stored/store")
@ResponseBody
publicStringstore(Stringxss, HttpServletResponseresponse) {
Cookiecookie=newCookie("xss", xss);
response.addCookie(cookie);
return"Set param into cookie";
}
@RequestMapping("/stored/show")
@ResponseBody
publicStringshow(@CookieValue("xss") Stringxss) {
returnxss;
}

store方法将输入的便xss,存放在cookie里。show方法将获得的cookie返回到页面。payload

xss=<script>alert(1)</script>

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

漏洞修复

@RequestMapping("/safe")
@ResponseBody
publicstaticStringsafe(Stringxss) {
returnencode(xss);
}

privatestaticStringencode(Stringorigin) {
/*   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;");*/
origin=StringUtils.replace(origin, "&", "&");
origin=StringUtils.replace(origin, "<", "<");
origin=StringUtils.replace(origin, ">", ">");
origin=StringUtils.replace(origin, "\"", "\");
origin=StringUtils.replace(origin, "'", "'");
origin=StringUtils.replace(origin, "/", "/");
returnorigin;
}

以上就是通过字符转义的方法进行过滤,基本上杜绝了xss漏洞。但如果少写一个,可能就会被利用绕过。

# Java代码审计 # JAVA安全
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者