一文搞懂文件下载·读取漏洞

news/2024/10/30 13:34:38/

一文搞懂文件下载·读取漏洞

  • 1.概述
  • 2.利用思路
  • 3.常见文件
    • Windows
    • Linux
  • 4.不安全的文件下载绕过手法
  • 5.修复建议

1.概述

文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。

例如此时如果攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载

所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑

常见功能点:读取/下载图片、文件内容;下载附件;预览文档;导出文档;修改、保存文档等

如果在测试过程中发现这些参数,可以多留意分析尝试:

&RealPath=
&FilePath=
&file=
&filename=
&Path=
&path=
&inputFile=
&url=
&urls=
&Lang=
&dis=
&data=
&readfile=
&filep=
&src=
&menu=
&META-INF=
&WEB-INF=

2.利用思路

  1. 查看常规的配置文件,如ssh、数据库、ftp等
  2. 查看常规的包含敏感信息的文件,如各用户的.bash_history
  3. 查看网站日志access.log,找找网站后台、用户密码、别人的shell等
  4. 查看源代码进行审计

总体来说,就是到处翻文件,找对我们渗透有帮助的文件获取信息即可🏸


3.常见文件

Windows

C:\windows\win.ini //可以用来判断是否为windows系统
C:\boot.ini //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml //IIS 配置文件
C:\Windows\repair\sam //存储系统初次安装的密码
C:\Program Files\mysql\my.ini //Mysql 配置
C:\Program Files\mysql\data\mysql\user.MYD //Mysql root
C:\Windows\php.ini //php 配置信息
C:\Windows\my.ini //Mysql 配置信息# 需要管理员权限
%ProgramData%\Microsoft\Search\Data\Applications\Windows\Windows.edb
%ProgramData%\Microsoft\Search\Data\Applications\Windows\GatherLogs\SystemIndex 目录下文件名类似SystemIndex.[数字序号].gthr%systemroot%\System32\winevt\Logs目录下的evtx日志文件,名字固定如下
Application.evtx
ConnectionInfo.evtx
Error.evtx
HardwareEvents.evtx
Internet Explorer.evtx
Key Management Service.evtx
Media Center.evtx
Microsoft-Windows-API-Tracing%4Operational.evtx
Microsoft-Windows-AppID%4Operational.evtx
Microsoft-Windows-Application Server-Applications%4Admin.evtx
Microsoft-Windows-Application Server-Applications%4Operational.evtx
Microsoft-Windows-Application-Experience%4Problem-Steps-Recorder.evtx
Microsoft-Windows-Application-Experience%4Program-Compatibility-Assistant.evtx
Microsoft-Windows-Application-Experience%4Program-Compatibility-Troubleshooter.evtx
Microsoft-Windows-Application-Experience%4Program-Inventory.evtx
Microsoft-Windows-Application-Experience%4Program-Telemetry.evtx# 不需要管理员权限
%userprofile%\AppData\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt # 类似.bash_history
%userprofile%\appdata\local\iconcache.db # 类似locate的db文件

Linux

/etc/passwd
/etc/shadow
/etc/hosts
/var/lib/mlocate/mlocate.db // locate命令的索引数据库文件,每天更新一次,大宝贝
/root/.bash_history //root 的 bash 历史记录
/root/.mysql_history //mysql 的 bash 历史记录
/root/.wget-hsts
/opt/nginx/conf/nginx.conf //nginx 的配置文件
/var/www/html/index.html
/etc/redis.conf
/etc/my.cnf
/etc/httpd/conf/httpd.conf //httpd 的配置文件
/proc/self/fd/fd[0-9]*(文件标识符)
/proc/mounts
/porc/config.gz
/proc/sched_debug // 提供 cpu 上正在运行的进程信息,可以获得进程的 pid 号,可以配合后面需要 pid的利用
/proc/mounts // 挂载的文件系统列表
/proc/net/arp //arp 表,可以获得内网其他机器的地址
/proc/net/route //路由表信息
/proc/net/tcp and /proc/net/udp // 活动连接的信息
/proc/net/fib_trie // 路由缓存
/proc/version // 内核版本
/proc/[PID]/cmdline // 可能包含有用的路径信息
/proc/[PID]/environ // 程序运行的环境变量信息,可以用来包含 getshell
/proc/[PID]/cwd // 当前进程的工作目录
/proc/[PID]/fd/[#] // 访问 file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log
其会去保存文档和目录名称到数据库内(这个数据库中含有本地所有文件信息。Linux系统自动创建这个数据库,并且每天自动更新一次),然后查找合乎范本样式条件的文档或目录。一般这个数据库的位置在:# ssh相关
/root/.ssh/id_rsa
/root/.ssh/id_rsa.pub
/root/.ssh/authorized_keys
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/ssh/sshd_config
/var/log/secure
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/syscomfig/network-scripts/ifcfg-eth1

4.不安全的文件下载绕过手法

  • 双写:适用于对../置空的情况,如..././config 去掉../的结果为../config
  • 编码:URL编码、两次URL编码、十六进制编码等;URL编码一般后端会解析一次,其他的编码需要分析服务端是否会进行解析
  • HPP、分块传输、填充垃圾字符:比较通用

5.修复建议

  • 在配置文件中限制访问的文件目录
  • 检查用户输入,过滤或转义含有../..\%00.../#等跳转目录或字符终止符、截断字符的输入
  • 严格过滤用户输入字符的合法性,比如文件类型、文件地址、文件内容等
  • 白名单限定访问文件的目录、路径、名称
  • 白名单限定访问文件的后缀如jpg、gif、png、rar、zip、pdf、doc、xls、ppt

http://www.ppmy.cn/news/48110.html

相关文章

一名合格的亚马逊运营,从早到晚都在做什么?

最近东哥分享了很多关于亚马逊话题的文章,发现有很多小伙伴很好奇亚马逊运营的事,很多人都说很想知道一名合格的亚马逊运营每天都需要干什么,那今天东哥就拿我们自己团队的亚马逊运营来跟大家聊一聊。 亚马逊运营从早到晚都干了些什么活&…

微信小程序自定义组件:组件间通讯

前言 略 组件间通信 组件间的基本通信方式有以下几种: WXML 数据绑定:用于父组件向子组件的指定属性设置数据,仅能设置 JSON 兼容数据(自基础库版本 2.0.9 开始,还可以在数据中包含函数)。具体在 组件模…

Python如何使用和配置Anaconda入门

1、Anaconda介绍 Anaconda 是一款广泛使用的Python和R语言开发环境,集成了许多常用的科学计算和数据分析库。它包括conda、Python解释器以及大量有用的库和工具,使得您可以更轻松地搭建Python和R的开发环境。此外,Anaconda 还提供了一个简单…

网络编程及项目思路

计算机和计算机之间通过网络进行数据传输 常见的软件架构: C/S:客户端/服务器 画面可以做的非常精美,用户体验好需要开发客户端,也需要开发服务端用户需要下载和更新的时候太麻烦 B/S:浏览器/服务器 不需要开发客户端,只需要…

车企围攻整车OS,这张“新王牌”怎么打?

今年2月23日,梅赛德斯--奔驰发布了打造自有操作系统MB.OS的具体计划,该操作系统将在本年代中期随全新梅赛德斯-奔驰模块化架构(MMA)平台推出,预计2025年用户将能体验到它的强大功能。 据悉,基于覆盖芯片到…

Linux_红帽8学习笔记分享_5

Linux_红帽8学习笔记分享_5 文章目录 Linux_红帽8学习笔记分享_51. UMASK反掩码1.1如何查看反掩码umask1.2 UMASK反掩码的作用1.2.1对于目录来说1.2.2对于文件来说 1.3如何修改UMASK反掩码1.4普通用户反掩码的测试 2.whereis的使用3. SUID权限弥补(主要针对文件,所有者执行位变…

C++---状态压缩dp---炮兵阵地(每日一道算法2023.4.17)

注意事项: 本题为"状态压缩dp—蒙德里安的梦想"和"状态压缩dp—小国王"和"状态压缩dp—玉米田"的近似题,建议先阅读这三篇文章并理解。 题目: 司令部的将军们打算在 NM 的网格地图上部署他们的炮兵部队。 一个…

计算机组成原理(考研408)练习题#1

用于复习408或计算机组成原理期末考试。如有错误请在评论区指出。 So lets start studying with questions! それでは、問題の勉強を始めましょう! 1. 设有一个 1MB 容量的存储器,字长为 32 位,问: (1)按…