哪些编程语言存在wrappers?是否仅PHP有可用于LFI漏洞利用的wrappers?
流包装器(wrappers)的跨语言存在性说明
wrappers(流包装器)并非PHP独有,绝大多数服务端编程语言/运行环境都内置了类似的协议封装机制,只是PHP的相关实现默认开放度高、和文件包含逻辑的适配性强,所以在LFI漏洞利用场景中出现的频率最高。
以下是常见存在wrappers机制的编程语言及对应利用场景:
- PHP:内置
php://、file://、phar://、zip://、data://等数十种原生流包装器,默认配置下大多无访问限制,只要存在可控的文件包含入参,即可直接通过wrapper读取源码、执行代码,是LFI漏洞利用的最常用场景。 - Python:文件操作API默认支持
file://协议,若代码中引入urllib、requests等网络请求库,还可支持http://、ftp://、data://等协议,可控路径传入对应函数时可触发任意文件读取、SSRF甚至RCE,另外zipimport机制也存在类似PHP phar wrapper的利用面。 - Java:IO体系原生支持
file://、jar://、war://、zip://等协议,若代码中使用URLClassLoader、URLConnection等类,还会支持http://、ftp://等协议,常见的Spring框架文件读取、路径穿越漏洞都可以结合这类wrapper实现恶意类加载、远程代码执行。 - Node.js:fs模块默认支持
file://协议,若可控路径传入http.get、fetch等请求方法,还可触发data://、http://等协议的解析,导致SSRF、任意文件读取漏洞,可控参数传入require方法时,也可通过file://协议加载恶意模块实现RCE。 - Ruby:File.open原生支持
file://协议,引入open-uri库后还可支持http://、ftp://、data://等协议,可控参数传入open方法时即可实现LFI、SSRF甚至RCE,是Ruby应用的常见漏洞利用路径。
不同语言的wrapper默认开放范围、访问限制各有差异,PHP之所以在LFI场景中最受关注,核心原因是其无需额外依赖、默认配置即可支持多种高危害的wrapper利用,其他语言的wrapper利用虽然依赖特定的函数调用场景,但同样存在较高的安全风险。
内容的提问来源于stack exchange,提问作者conan2020
相关产品推荐
相关产品推荐

