天天看点

Java代码审计之XSS审计

​​​​Java代码审计之xss视频教程​​

XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。

反射型xss

为了让我们方便理解,作者这里没有使用其他花里胡哨的html页面

@RequestMapping("/reflect")
@ResponseBody
public static String reflect(String xss) {
    return xss;
}      

payload

xss=<script>alert(1)</script>      

return将这个变量返回到html,导致了XSS漏洞

可以看到最后执行了js代码,实现了弹窗。

存储型xss

攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。这就意味着只要访问了这个页面的访客,都有可能会执行这段恶意脚本,因此储存型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";
}

@RequestMapping("/stored/show")
@ResponseBody
public String show(@CookieValue("xss") String xss) {
    return xss;
}      
xss=<script>alert(1)</script>      

漏洞修复

@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, "'", "&#x27;");
    origin = StringUtils.replace(origin, "/", "&#x2F;");
    return 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, "/", "/");