java代码审计-xss
描述
XSS,即跨站脚本攻击,是指攻击者利用Web服务器中的应用程序或代码漏洞,在页面中嵌入客户端脚本(通常是一段由JavaScript编写的恶意代码,少数情况下还有ActionScript、VBScript等语言),当信任此Web服务器的用户访问Web站点中含有恶意脚本代码的页面或打开收到的URL链接时,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。当应用程序没有对用户提交的内容进行验证和重新编码,而是直接呈现给网站的访问者时,就可能会触发XSS攻击。
XSS漏洞的危害
-
窃取管理员帐号或Cookie。入侵者可以冒充管理员的身份登录后台,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。
-
窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。
-
网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。
-
发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。
- 在特殊场景下甚至能够造成命令执行以及蠕虫,扩大危害程度
审计技巧
-
收集输入、输出点。
-
查看输入、输出点的上下文环境。
-
判断Web应用是否对输入、输出做了防御工作(如过滤、扰乱以及编码)。
-
通过功能、接口名、表名、字段名等角度做搜索
- 结合前端,关键字
document.URL
、document.location
、document.referer
、document.from
、eval
、document.write
、document.InnerHTML
、document.OuterHTML
漏洞防御
可以使用esapi的encoder
import org.owasp.esapi.ESAPI;
String content = request.getParameter("content");
content = ESAPI.encoder().encodeForHTML(content);
content = ESAPI.encoder().encodeForJavaScript(content); //防御dom xss使用jsencode
也可以自行进行htmlencode
import org.apache.commons.lang.StringUtils;
private String htmlEncode(String content) {
content = StringUtils.replace(content, "&", "&");
content = StringUtils.replace(content, "<", "<");
content = StringUtils.replace(content, ">", ">");
content = StringUtils.replace(content, "\"", """);
content = StringUtils.replace(content, "'", "'");
content = StringUtils.replace(content, "/", "/");
return content;
}
参考链接
山石JavaWeb靶场的XSS相关页面,具体代码见:package com.hillstone.controller.xss