这期内容更是简单和方便,毕竟谁还没在浏览器上下载过东西,不过对于url的构造方面,可能有一点问题,大家要多练手
介绍
不安全的文件下载概述
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如../../../etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。 切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
你可以通过“Unsafe file download”对应的测试栏目,来进一步的了解该漏洞。
个人评价:很常见,因为很多网站都有下载文件的功能,这就是我们的切入点。(对于一些个人网站开发者来说,这是非常重要的防护点,因为服务器可能会产生一些重要文件,但是由于疏忽或者不了解,可能会导致严重的数据泄露特别是服务器的缓存,日志之类的,切记定期回收)
适用场景:所有有下载文件功能的网站都可能有这个漏洞
实际反馈:对于大企当然很难,但是对于一些个人开发者而言,很可能从中获取敏感信息
原理
若后台在拼接下载文件路径时,未对用户传入的文件名进行安全判断,直接将其拼接到路径中,攻击者就可提交精心构造的路径,如../../../etc/passwd
,越权下载指定文件,导致后台敏感信息泄露,像密码文件、源代码等
这个漏洞类似于一个图书馆允许你借阅任何一本书,但是一些书籍被屏蔽掉了。如果你知道图书馆的书籍结构,就可以通过去特殊的位置来那些获取那些本该受限的书籍。 (比较恶心,因为实际应用中还是需要一个一个的尝试来确定结构,从而确定漏洞位置)
实践
正如上面的原理说的,我们可以通过构造一些路径来获取信息
我们先来抓个包分析一下
我们可以看到我们的url指向了科比布莱恩的png图片,我们以这里为切入点进行路径构造
../../../index.php
(这里下载的源文件,不是很敏感的文件,但是可以知道,如果没有做这方面的防护,敏感信息迟早要漏完)
或者
../down_nba.php
以此类推,由于我们知道皮卡丘的文件,所以我们可以知道他们的路径和下载文件的名字
但是正常来说我们不可能知道,这就要用到一些"米奇妙妙工具了"(之后会发)
但是手动进行的话,可以帮助我们了解,大家可以自己试试以下内容
配置文件类
- `../../../config.php`:可能会包含数据库连接信息、管理员账号等敏感数据。
- `../../../.env`:在一些现代Web应用中,该文件用于存储环境变量,可能包含各种敏感信息,如数据库凭证、API密钥等。
日志文件类
- `../../../logs/error.log`:可能包含应用程序的错误信息,如SQL查询错误、路径泄露等,有时会暴露敏感信息。
- `../../../var/logs/access.log`:记录了用户访问的详细信息,可用于分析用户行为或寻找其他潜在漏洞。
源码文件类
- `../../../application/controllers/Admin.php`:获取控制器文件,了解后台管理逻辑。
- `../../../application/models/User_model.php`:获取模型文件,查看用户数据处理逻辑。
数据库文件类(如果文件下载漏洞能访问到数据库文件)
- `../../../database.db`:SQLite数据库文件。
- `../../../mydb.sql`:MySQL等数据库的备份文件,可能包含表结构和数据。
系统文件类(如果靶场环境允许访问系统文件)
- `../../../../../etc/passwd`:Linux系统用户信息文件(通常用于测试路径遍历)。
- `../../../../../boot.ini`:Windows系统启动配置文件(在Windows环境下)。
其他常见文件
- `../../../.git/index`:如果项目使用Git版本控制,访问`.git`目录下的文件可能会暴露项目的所有历史提交信息和代码。
- `../../../robots.txt`:虽然通常不太敏感,但可能会泄露网站的目录结构或禁止访问的路径。
至此,Unsafe Filedownload模块完成
虽然这几期的内容很简单,但是仍然要记住实践,正如圣人王阳明所说
知之真切笃实处即是行,行之明觉精察处即是知