大柚子

这世界不过如此

一、概述

XSS是种通用型的漏洞,不同的后端语言都会出现。对于Java代码层面来说,就是要注意requests的上下文环境。如下代码就是Java中产生反射型XSS漏洞的典型样例。接收“data”参数,然后没经过处理和过滤,直接返回到前端,从而产生反射型XSS漏洞:


public class XSSTestController {
    public String XXSXXSInject(HttpServletRequest request){
        String data = request.getParameter("data");
       
        if ( data != null && !data.isEmpty()){
            return "hello," + data + ".";
        }
        return "404";
    }
}

二、XSS代码分析

1、启动webgoat环境,进入xss漏洞利用界面

2、按F12打开浏览器元素审查,切换到Network栏目,点击“Purchase”,获取真正请求的接口:http://127.0.0.1:8080/WebGoat/CrossSiteScripting/attack5a?QTY1=1&QTY2=1&QTY3=1&QTY4=1&field1=4128+3214+0002+1999&field2=111,如下图所示:

3、根据获取到的接口,直接在源码里搜索attack5a

4、定位到类”org.owasp.webgoat.xss.CrossSiteScriptingLesson5a”,双击查看源码

5、从源码分析可以得到,总共接收6个参数,其中tring类型的参数有两个:field1、field2,且field2参数存在过滤,转换为小写后匹配正则,先暂不考虑。

6、分析field1值,该参数的值直接追加给card中,且当field1的值符合过滤条件后,将card的值返回到前端。

7、经上分析,漏洞存在点为field1参数,在漏洞利用页面 F12元素中查找“field1”,该参数对应的输入为card number的值

8、故此利用方式为在card number的框中输入利用代码:


<script>alert(document.cookie)</script>

三、XSS审计小技巧

1、审计反射型XSS一般通过三种方法:


①查看特定功能点代码,能直接返回输入参数的典型的应用场景入搜索处返回搜索关键字、用户登录返回不存在的用户名等
②查看各个request的上下文环境代码,观察有无对输入参数的XSS处理和过滤,用户所能控制的参数是否直接返回到前端html页面中
③搜索关键函数:response.getWriter、out.println等能直接返回到前端的方法或者自定义的返回数据到前端的类和方法。

2、查看是否有针对XSS的过滤方法代码,一般会以如XSSfilter之类明显的名字命名


①在通用的工具类中查看
②在filter中查看
Print Friendly, PDF & Email

发表回复

您的电子邮箱地址不会被公开。