java代码审计-xss漏洞
【摘要】 0x01 前言XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript。xss本质上就是浏览器执行了域外的代码,出现的场景比较多,需要具体情况具体分析0x02 反射型xss @RequestMapping("/reflect") @ResponseBody p...
0x01 前言
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript。xss本质上就是浏览器执行了域外的代码,出现的场景比较多,需要具体情况具体分析
0x02 反射型xss
@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
return xss;
}
可以看到代码中设定参数值没有经过任何过滤访问直接返回到页面中
payload:xss=<script>alert(/xss/)</script>
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
访问路由/stored/show,触发xss
0x04 漏洞修复
自定义函数,过滤<>
等敏感字符
@RequestMapping("/safe")
@ResponseBody
public static String safe(String xss) {
return encode(xss);
}
private static String encode(String origin) {
origin = StringUtils.replace(origin, "&", "&");
origin = StringUtils.replace(origin, "<", "<");
origin = StringUtils.replace(origin, ">", ">");
origin = StringUtils.replace(origin, "\"", """);
origin = StringUtils.replace(origin, "'", "'");
origin = StringUtils.replace(origin, "/", "/");
return origin;
}
0x05 其它
xss的利用手段主要是网络蠕虫攻击和窃取用户cookie信息。xss蠕虫通过漏洞点嵌入恶意的js代码,执行代码后,就会添加带有恶意代码的页面或DOM元素,从而进行传播。而如果盗取cookie信息,常见的就是进行跨域请求的问题。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)