Skip to content

java代码审计-xss

描述

XSS,即跨站脚本攻击,是指攻击者利用Web服务器中的应用程序或代码漏洞,在页面中嵌入客户端脚本(通常是一段由JavaScript编写的恶意代码,少数情况下还有ActionScript、VBScript等语言),当信任此Web服务器的用户访问Web站点中含有恶意脚本代码的页面或打开收到的URL链接时,用户浏览器会自动加载并执行该恶意代码,从而达到攻击的目的。当应用程序没有对用户提交的内容进行验证和重新编码,而是直接呈现给网站的访问者时,就可能会触发XSS攻击。

XSS漏洞的危害

  • 窃取管理员帐号或Cookie。入侵者可以冒充管理员的身份登录后台,使得入侵者具有恶意操纵后台数据的能力,包括读取、更改、添加、删除一些信息。

  • 窃取用户的个人信息或者登录帐号,对网站的用户安全产生巨大的威胁。例如冒充用户身份进行各种操作。

  • 网站挂马。先将恶意攻击代码嵌入到Web应用程序之中。当用户浏览该挂马页面时,用户的计算机会被植入木马。

  • 发送广告或者垃圾信息。攻击者可以利用XSS漏洞植入广告,或者发送垃圾信息,严重影响到用户的正常使用。

  • 在特殊场景下甚至能够造成命令执行以及蠕虫,扩大危害程度

审计技巧

  • 收集输入、输出点。

  • 查看输入、输出点的上下文环境。

  • 判断Web应用是否对输入、输出做了防御工作(如过滤、扰乱以及编码)。

  • 通过功能、接口名、表名、字段名等角度做搜索

  • 结合前端,关键字document.URLdocument.locationdocument.refererdocument.fromevaldocument.writedocument.InnerHTMLdocument.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, "<", "&lt;");
    content = StringUtils.replace(content, ">", "&gt;");
    content = StringUtils.replace(content, "\"", "&quot;");
    content = StringUtils.replace(content, "'", "&#x27;");
    content = StringUtils.replace(content, "/", "&#x2F;");
    return content;
}

参考链接

山石JavaWeb靶场的XSS相关页面,具体代码见:package com.hillstone.controller.xss

Comments