1. XSS

1.1 反射性XSS reflect:

1712542876_6613549cbf936260870da.png!small?1712542877499

@RequestMapping("/reflect"):这是一个注解,指示当发出HTTP请求时,应该调用这个方法。具体来说,当客户端发送一个请求到"/reflect"路径时,Spring框架会将该请求路由到这个方法。@ResponseBody:这也是一个注解,指示Spring将方法的返回值直接作为HTTP响应体返回给客户端,而不是通过视图解析器渲染成视图。

这段代码的作用是接受一个HTTP请求,在"/reflect"路径上,并将请求中的一个参数(命名为xss)原封不动地返回给客户端。1712543139_661355a32911f9f82f2d0.png!small?1712543139783

1.2 存储型XSS store,show

1712543904_661358a0dae8fcf968055.png!small?1712543906158

Cookie cookie = new Cookie("xss", xss);:在这一行中,我们创建了一个名为cookie的新Cookie对象。这个Cookie的名称是"xss",它的值是传入的xss参数的值。这样,我们就将xss参数的值存储在了Cookie中。

response.addCookie(cookie);:在这一行中,我们通过response对象将之前创建的Cookie添加到HTTP响应中。这样,当这个HTTP响应被发送到客户端时,浏览器就会接收到包含名为"xss"的Cookie。

@CookieValue注解,这个注解告诉Spring框架从请求中提取名为 "xss" 的Cookie的值,并将其作为参数传递给方法。

1712544395_66135a8b9142934f21538.png!small?1712544398788

1712544424_66135aa81aa43d6ce18ad.png!small?1712544425157

1.3 安全safe

1712549181_66136d3dbf4606dfd7986.png!small?1712549183133

可以看出,把&,<>,\,',/都转义了。

2. 任意文件读取漏洞

2.1 getImage

1712557448_66138d8845cafa4e15210.png!small?1712557449325

把filepath穿给getImgBase64,然后经过处理返回

1712557565_66138dfd1811dd1f390c2.png!small

if (f.exists() && !f.isDirectory()) { // 检查文件是否存在且不是目录 byte[] data = Files.readAllBytes(Paths.get(imgFile)); // 读取文件内容为字节数组 return new String(Base64.encodeBase64(data)); // 将文件内容进行Base64编码并返回

可见这个是个危险的方法:

1712557795_66138ee34fdd08aaa9ec2.png!small?1712557796029

从Base64.encodeBase64(data)可以知道是经过base64加密的。解码:

1712557845_66138f150bf7a4e14d62e.png!small?1712557845902

2.2 getImageSec

1712558234_6613909a613b55450747c.png!small?1712558235403

这个方法中对pathFilter对filepath进行了过滤:SecurityUtil.pathFilter(filepath) == null

看一下过滤的规则:pathFilter

1712558353_66139111d47d70d3501ac.png!small?1712558354763

temp.indexOf('%') != -1判断传入的参数是否包含%,如果包含就将其解码成utf-8模式。直到不包含%为止。也就是说:检查文件路径中是否存在多次URL编码的情况。最好检查文件路径是否包含..或以/开头。

1712558945_661393614ce27e1168716.png!small?1712558946165

这个虽然经过了过滤,但是针对windows系统。显然还是不安全的