1.浅谈URI中的源码任意文件
浅谈URI中的任意文件
文件下载业务中,URI的解析正确处理是关键。通常,源码接口形式如//download?解析fileName=xxx.png,若未过滤目录穿越符号如...或未限制下载路径,源码传入参数如../../etc/passwd即可实现路径穿越,解析yy协议源码2023下载任意文件。源码解析URI以得到文件名,解析如/file/test.jpg,源码尝试访问/file/../../test.jpg时,解析中间件或框架在解析路由时会有所处理。源码那么,解析能否通过此途径进行目录穿越并利用呢?
在实际项目中,源码一个文件下载的解析实现使用了Spring框架的FileCopyUtils.copy()方法。文件路径filepath通过req.getRequestURI()获取,源码个人主页模板源码此方法不规范URI中的特殊字符,直接拼接路径并读取文件,未限制下载目录且未过滤敏感关键字,存在任意文件下载风险。
当前项目的upload目录结构如下:
访问../WEB-INF/web.xml,成功穿越到上级目录WebContent,并获取web.xml配置信息。html5动画源码下载中间件处理../,使其等同于直接访问/userfiles/WEB-INF/web.xml。若尝试读取更敏感文件如/etc/passwd,需要多级../,但tomcat处理后已不在有效目录范围内,返回异常。尝试扩大漏洞危害,微信会员管理系统源码编码请求触发 Invalid URI错误,tomcat对保留字符;进行截断并处理为参数。在编码基础上再次访问,获取路径为/upload/;/../../../../../../../../etc/passwd,返回状态码。
结合网站其他业务,可以创建名为;的java在线考试系统源码下载目录,访问/userfiles/upload/;%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd,成功下载敏感文件。
引入@PathVariable注解,用于接收请求路径中的占位符值,可以实现文件下载,如访问/var/work/download/{ filename},下载名为{ filename}的文件。参数在URI中,利用还需探究。
通常,直接使用../../../目录穿越尝试下载/etc/passwd等敏感文件,中间件解析时已处理../,参数filename无法利用。处理后URI为/file/etc/passwd,未找到映射,返回。
尝试对/编码访问,tomcat源码检测到%2F斜杠返回状态码。源码流程包括解码和格式化URI。Spring对URI进行一次解码,如/file/get/..%fetc/passwd变为/file/get%2fetc/passwd。
在前端用JS对URL编码,忽略Spring的解码操作。使用双重URL编码处理../请求,绕过中间件和Spring的URLDecode,实现目录穿越,成功下载内容。
集成Shiro框架时,案例一中的;可能需要编码为%3b。Shiro高版本对编码进行处理,继续利用需深思。