freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

java代码审计java-sec-code XSS,任意文件读取
2024-04-08 14:51:15

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系统。显然还是不安全的

# 渗透测试 # web安全 # 漏洞分析 # 网络安全技术 # Java代码审计
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录