渗透测试-不安全的文件下载原理及案例
不安全的文件下载原理及案例
前言
一、什么是不安全的文件下载
简单来说,就是一些网站由于业务需求,往往需要提供文件查看或下载功能,但若对用户查看或下载的文件不受限制,则恶意用户就能能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。
文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。 如果后台在收到请求的文件名后,将其直接拼进下载文件的路径中而不对其进行安全判断的话,则可能会引发不安全的文件下载漏洞。
此时如果 攻击者提交的不是一个程序预期的的文件名,而是一个精心构造的路径(比如…/…/…/etc/passwd),则很有可能会直接将该指定的文件下载下来。 从而导致后台敏感信息(密码文件、源代码等)被下载。
所以,在设计文件下载功能时,如果下载的目标文件是由前端传进来的,则一定要对传进来的文件进行安全考虑。
切记:所有与前端交互的数据都是不安全的,不能掉以轻心!
二、不安全文件下载获取敏感信息
1.不安全文件下载
这里我们使用pikachu漏洞练习平台进行实验
这时我们点击图片下方的文字,出现下载页面
说明存在文件下载漏洞,我们进行利用该漏洞进行文件的下载
打开文件的路径可以发现
http://192.168.222.4/pikachu/vul/unsafedownload/execdownload.php?filename=kb.png
确实是一个典型的文件下载形式
这里我总结了几种常见的利用方式
一般链接形式
download.php?path=
down.php?file=
data.php?file=
或者包含参数
&Src=
&Inputfile=
&Filepath=
&Data=
我们首先对进行对代码的审计,发现漏洞所在的地方
发现只是直接下载了文件,没有进行过滤操作,明显存在文件下载漏洞
再查看一下,下载的文件路径,也是没有进行过滤,我们通过这个漏洞进行利用,下载我们需要的文件信息
2.获取数据库敏感信息
首先我们下载pikachu目录下的index.php试试看
修改路径,回到当前图片文件的路径,在回溯到前三级的pikachu目录下
http://192.168.222.4/pikachu/vul/unsafedownload/execdownload.php?filename=…/…/…/index.php
我们打开网址,发现竟然下载了,说明漏洞利用成功
我们打开文件看看
文件打开成功
接下来我们下载pikachu下的配置文件
http://192.168.222.4/pikachu/vul/unsafedownload/execdownload.php?filename=…/…/…/inc/config.inc.php
下载成功,拿到了数据库的配置文件,实验结束。
这里我总结了
当遇到一个任意文件狭隘时,我们的一般利用思路:
(1)下载常规的配置文件,例如:ssh,weblogic,ftp,mysql等相关配置
(2)下载各种.logwenjian,从中那个寻找一些后台地址,文件上传点之类的地方
(3)下载web业务文件进行白盒审计,利用漏洞进一步攻入服务器
尝试读取/root/.bash_history/看自己是否具有root权限,如果没有的话,我们只能按部就班的利用…/来回跳转读取一些可以利用的相关信息。然后逐个下载我们需要审计的代码文件,但是下载的时候变得很繁琐,我们只能尝试去猜解目录,然后下载一些中间件的记录日志进行分析。
(4)如果具有root权限
在linuux中有这样一个命令locate是用来查找文件或目录的,他不搜索具体目录,而是搜索一个数 这个数据库,并且每天自动更新一次。但我们不知道路径是什么情况下,这个可以说是一个核武器了, 我们利用任意文件下载老一代mlocate.db文件下载下来,利用locate命令将数据输出成文件,这里面包含了全部文件路径信息。
locate读取方法:locate mlocate.db admin //可以将mlocate.db中 包含admin文件名的内容全输出来
(5) 常见利用文件
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_rsa.keystore
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/proc/self/cmdline //当前进程的cmdline参数
漏洞修复建议
(1)过滤".",使用户在url中不能回溯上级目录
(2)正则严格判断用户输入参数的格式
(3)php.ini配置open_basedir限定文件访问范围
总结
本次实验是对不安全文件下载的原理以及攻击利用的相关介绍,以及对该漏洞的修复建议,对文件下载有了更深层的理解和掌握。
相关文章
- struts+hibernate+oracle+easyui实现lazyout组件的简单案例——hibernate的config文件(hibernate.cfg.xml)
- Mybatis+mysql动态分页查询数据案例——配置映射文件(HouseDaoMapper.xml)
- Struts 框架 之 文件上传下载案例
- Windows 2003 Server C盘空间被IIS日志文件消耗殆尽案例
- Unity5.1 新的网络引擎UNET(二) UNET 官方推荐Demo案例
- Python-装饰器-案例-获取文件列表
- VB.net:VB.net编程语言学习之基于VS软件连接SQL Server(利用ADO.NET操作数据库/添加新数据源/DataGridView数据表格控件)的简介、案例应用之详细攻略
- CV之IS:基于pixellib库和coco数据集且加载.h5文件利用deeplabv3和xception算法实现图像语义分割/图像分割简单代码全实现(以热播电视剧《庆余年》视频片段为例)案例应用
- CV之FR:基于dlib、cv2库利用warpPerspective函数和shape_predictor_68_face_landmarks.dat文件实现AI换脸渐变融合的视频效果案例应用
- ML之FE:数据处理—特征工程之稀疏特征的简介、如何处理、案例应用之详细攻略
- Python之pandas:pandas中数据处理常用函数(与空值相关/去重和替代)简介、具体案例、使用方法之详细攻略
- AI实战分享 | 基于CANN的辅助驾驶应用案例
- Kubernetes集群RBAC授权案例(二)通过kubeconfig授权文件实现特定资源的权限分配(四十一)
- 系统集成项目管理工程师案例分析考点汇总(范围管理)
- 栈的应用案例---就近匹配
- Py经典案例:利用Python调用数据库历史记录文件,实现BTC、LTC等Encrypted currency找出最佳出仓价、收益比的加密币模拟交易系统
- Linux之Ubuntu:Ubuntu中常使用的快捷键命令(sudo/dpkg等文件处理相关/系统硬件相关/文件管理/文档编辑/磁盘管理/系统管理/备份压缩)、常用基础案例(图文教程)之详细攻略
- python文件操作案例
- a2.ansible 生产实战案例 -- 系统初始化playbook
- Shell脚本经典案例:文件的备份