专栏首页卓文见识Java代码审计汇总系列(七)——XSS

Java代码审计汇总系列(七)——XSS

一、概述

xss漏洞是指对于和后端有交互的地方没有做参数的接收和输入输出过滤,导致恶意攻击者可以插入一些恶意的js语句来获取应用的敏感信息,黑盒系列可见:浏览器解析与编码顺序及xss挖掘绕过全汇总

大多数通过白盒发现的xss通常发生在将用户输入拼接构造页面元素,或直接输出在前端页面中。

二、挖掘技巧

xss分为反射型,存储型和DOM型,挖掘的思路类似,注意前端构造的参数(元素或值)是否用户可控。

但白盒挖掘xss不像之前的漏洞有明显的漏洞特征和危险函数,需要根据实际情况审计前端js、jsp、html文件。用户输入处用的比较多的是request.getParameter(param)、${param}直接获取用户输入,当然也有其他输入源,需根据代码实际情况分析判断。

类似如下案例,直接将内容返回到前台的页面上,追踪courseName,其值取自数据库,用户可控:

三、漏洞防御

xss的防御办法较多且较为简单:

1、全局编写过滤器;

xml配置文件中定义过滤类或自写过滤类:

private String cleanXSS(String value) {
                //You'll need to remove thespaces from the html entities below
       value = value.replaceAll("<", "&lt;").replaceAll(">", "& gt;");
        value = value.replaceAll("\\(","& #40;").replaceAll("\\)", "& #41;");
       value = value.replaceAll("'", "& #39;");
       value = value.replaceAll("eval\\((.*)\\)", "");
       value =value.replaceAll("[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']","\"\"");
       value = value.replaceAll("script", "");
       return value;

2、调用第三方包

添加jar包:commons-lang-2.5.jar ,在后台调用函数:

StringEscapeUtils.escapeHtml(string);
StringEscapeUtils.escapeJavaScript(string);
StringEscapeUtils.escapeSql(string);

3、HTML转义输出

org.springframework.web.util.HtmlUtils 可以实现HTML标签及转义字符之间的转换。

String string =HtmlUtils.htmlEscape(userinput);  //转义
String s2 =HtmlUtils.htmlUnescape(string);  //恢复

四、实战案例

1、DOM XSS

审计js文件发现DOM渲染,经典的将用户输入拼接生成HTML代码或script标签中,这是在白盒测试中最常见的xss场景:

function search (){
         varinputStr = $_ts("#search_input").val();
         if(inputStr.length> 0){
                   varsearchurl = ""+url+"/search?keyword="+inputStr +"&lang=zh";
                   varsearchLink = '<a id="temp_search_link" target="_blank"rel="noopener " href="' + searchurl + '"style="display:none;"><span id="searchclick"></span></a>';
                   $_ts("body").append(searchLink);
                   $_ts("#searchclick").click();
                   $_ts("#temp_search_link").remove(); 
         }

2、Cookie XSS

同样是审计js文件,在文件中发现如下代码,:

document.write('<linkhref="resource/web/css/page.css" type="text/css"rel="stylesheet" />');
         varlocale = getCookie("locale");
         varCssPath = "resource /web/theme /default/css/base_" + locale +".css";
         document.write('<linkhref="' + CssPath + '" type="text/css"rel="stylesheet" />');

将经过getCookie方法的值locale进行拼接,用document.write 输出到页面,跟进getCookie:

function getCookie(name) {
         vararr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
         if(arr = document.cookie.match(reg))
                   returnunescape(arr[2]);

将cookie变量值locale与目录进行拼接,用document.write 输出到页面,未检查特殊字符,可在前端伪造cookie进行攻击。

另外,挖掘DOM xss可关注location.*、document.*、window.*等关键字。

3、 过滤绕过

审计jsp文件,param为用户输入参数,

然后在js文件中的exportStep2Host函数中进行赋值,在后 URL解码后传给form表单的action属性,然后再提交表单。这个函数会在页面被打开的时候触发。

但在取用户输入时经过了validateQuotAndBracketChar过滤,跟进分析此工具类:

这个类对用户输入进行了黑名单限制,不能包含<>’”以及对字符url编码的%3E、%3C等字符。可使用javascript协议进行url编码绕过:

javaScript%3a%3ba%25%36%63ert%601%60

最终payload:

https://url/path/exportStep2Host.jsp?param=javaScript%3a%3ba%256cert`1`

所以能用白名单尽量用白名单,若使用黑名单尽量全面。

本文分享自微信公众号 - 卓文见识(zhuowenjianshi)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 接口仔也不是好当的,聊一聊前后端分离开发中后端接口设计规范

    随着互联网的高速发展,前端页面的展示、交互体验越来越灵活、炫丽,响应体验也要求越来越高,后端服务的高并发、高可用、高性能、高扩展等特性的要求也愈加苛刻,从而导致...

    江南一点雨
  • 网站性能优化实战(二)

    本文是对前文:http://imweb.io/topic/5b6fd3c13cb5a02f33c013bd 相关知识的补充,文中的“前文”一词同此。

    IMWeb前端团队
  • Java开发就业岗位你选择哪个

    Java已成为当今市面上很受欢迎的编程软件,对于处于信息高速发达的今天,Java技术已经无处不在,IT行业技术更新的比较快,所以我们肯定是学现在企业需要的技术,...

    千锋哈尔滨IT培训
  • 实战|一次授权项目的渗透测试

    比如端口扫描、网站的架构、敏感目录、是否存在CDN。子域名(资产收集)收集。做好信息收集工作就可以一步一步找漏洞的所在点了(学基础是时候一定要把原理学好...

    用户6343818
  • 记一次某XX远程接访系统漏洞后台getshell

    我这里做的第一步是做敏感目录扫描(自己的特有字典),跑出一处某程序控制台登入界面(尝试弱口令进入)

    用户6343818
  • JNI技术绕过rasp防护实现jsp webshell

    想到rasp这类工具是基于java、php运行期的堆栈信息进行分析,可以尝试使用jni技术进行绕过。java技术栈中的jni的原理是使用java调用c、...

    糖果
  • 经典笔试题-JSP如何获取HTML FORM中的数据

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    cwl_java
  • 渗透思路页面源代码查看

    随便一找就是注入点 http://www.XXXX.cn/list.jsp?classid=17

    ittongluren
  • Java 的 JSP 已经被淘汰了吗?

    以前的项目大多数都是java程序猿又当爹又当妈,又搞前端(ajax/jquery/js/html/css等等),又搞后端(java/mysql/Oracle等等...

    Java团长
  • JNI技术绕过rasp防护实现jsp webshell

    想到rasp这类工具是基于java、php运行期的堆栈信息进行分析,可以尝试使用jni技术进行绕过。java技术栈中的jni的原理是使用java调用c、...

    Ramos

扫码关注云+社区

领取腾讯云代金券