zl程序教程

您现在的位置是:首页 >  其他

当前栏目

渗透测试-不安全的文件下载原理及案例

2023-09-11 14:15:49 时间

不安全的文件下载原理及案例

前言

一、什么是不安全的文件下载

简单来说,就是一些网站由于业务需求,往往需要提供文件查看或下载功能,但若对用户查看或下载的文件不受限制,则恶意用户就能能够查看或下载任意敏感文件,这就是文件查看与下载漏洞。

文件下载功能在很多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限定文件访问范围

总结

本次实验是对不安全文件下载的原理以及攻击利用的相关介绍,以及对该漏洞的修复建议,对文件下载有了更深层的理解和掌握。