任意文件下载
- 任意文件下载漏洞原理
应用程序没有对用户输入进行充分的验证和过滤,允许攻击者从服务器下载任意文件,导致敏感信息泄露、服务器被控制等安全风险。
攻击者可以利用多种技术来执行任意文件下载,包括本地文件包含(LFI)、远程文件包含(RFI)、目录遍历和服务器端请求伪造(SSRF)等。这些技术通常通过构造特殊的URL参数或请求头来实现,例如使用../进行目录遍历或利用文件读取函数的漏洞来读取服务器上的敏感文件。 - 任意文件下载漏洞挖掘
1、通过页面信息进行挖掘
查看源代码查找是否由readfile()、file_get_contents()、fopen()等函数(与文件读取函数联动),如果¥filename没有经过校验或者校验不合格,用户就可控制变量读取任意文件。如/etc/passwd、/index.php、/config.ini等
2、通过URL链条进行挖掘
3、在脚本代码中进行挖掘,进行代码审计。
4、功能上:读取/下载图片、文件内容;下载附件;预览文档;导出文档;修改、保存文档。 - 利用方式
1、获取配置文件:攻击者可以下载SSH、WebLogic、FTP、Mysql等相关配置文件,文件中可能包含敏感信息,如数据库的访问凭证。
2、访问日志文件:通过下载各种.log文件,攻击者可以找到后台地址、文件上传点信息,甚至获取后门。
3、控制服务器:如果攻击者具有root权限,可以通过下载如/etc/passwd或/root/.bash_history等文件来获取更多系统信息 ,进一步控制服务器。
4、利用web应用文件:下载web业务文件进行白盒审计,攻击者可以利用发现的漏洞进一步攻入服务器。
5、利用文件读取函数:fopen()、fread()或include()等PHP函数读取文件内容,函数的参数可控且未经过严格校验,就可以被用来进行任意文件下载。
6、利用目录遍历:构造特殊的URL参数或请求头,使用../进行目录遍历,访问并下载服务器上任意目录中的文件。
7、利用服务器端请求伪造(ssrf):攻击者可能通过构造特定的请求头或参数,使服务器发起到攻击者控制的远程服务器的请求,从而下载恶意文件并执行。
8、利用特定的web框架或应用漏洞:例如,利用java SpringMVC或SpringBoot框架的配置文件,下载对应的class文件或jar包,进一步分析源码或构造反序列化攻击链。
9、下载操作系统敏感文件:windows如C:\boot.ini查看操作系统版本,或在Linux系统中下载/etc/passwd获取用户信息。
10、利用文件下载漏洞挖掘:使用web漏洞扫描器或Goolehacking技术寻找潜在的文件下载漏洞点,例如通过搜索特定文件名和参数名发现可能漏洞。 - 常见利用文件
- 任意文件下载漏洞防御
1、净化数据:对用户传递的文件名参数进行统一编码,对文件类型进行白名单控制,对包含恶意字符或者空字符的参数进行拒绝。
2、及时更新中间件版本
3、将下载的文件地址保存到数据库中
4、文件路径保存至数据库,让用户提交文件对应ID下载文件。
5、用户下载文件之前需要进行权限判断
6、文件放到web无法直接访问的目录下。
7、不允许提供目录遍历服务
8、公开文件可放置在web应用程序下载目录中通过链接进行下载。 - 任意文件下载漏洞绕过
1、双写:适用于对../过滤。
2、编码:URL编码、两次URL编码、十六进制编码等
3、路径穿越+截断:当代码中固定文件后缀名时,可以使用\0字符来截断后缀名
4、HPP、分块传输、填充垃圾字符等。
本文作者:予遂计划
本文链接:https://www.cnblogs.com/ysjh/p/18734097
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步