不安全的文件下载和上传那些事儿(1)

1:不安全的文件下载漏洞

  在实际的应用中,很多网站通常都会提供文件下载功能:用户可以通过点击下载链接,下载到链接所对应的文件。具体过程如下:

当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件名对应的文件response给浏览器,从而完成下载。

  然而,如果文件下载功能设计有缺陷,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他敏感文件

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

*********解决思路

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

注:我们认为一般所有与前端交互的数据都是不安全的!

************不安全的文件下载(案例演示),点击图片会将其下载至本地

当我们点击图片时,请求如下:

finame=ai.png传到了后台,后台在查找这个文件,把这个文件响应输出到前端。如果后端的代码控制的不是很严格,那么很有可能就会出现这个漏洞。

一般而言,测试文件下载漏洞通过目录遍历的方式去做测试。

../../是目录跳转的一个操作,敲够足够多的../是可以跳到根目录下的。然后再以根目录为起始点,往下进行相关的读取。

例如:这是一台Linux服务器,linux服务器下有很多配置文件,且配置文件一般都是固定的(文件+路径)。

                                         这里举例 linux etc/password将请求中的finame做修改。

点击下载之后:

打开文件,我们得到了x.x.x.x服务器上的配置文件,打开如下图:

同理,还可以下载后台服务器上其他的配置文件,例如:etc/fstab----------------这是磁盘挂载的一个配置文件

上述发生的原因:

后端对我们传入进去的文件名对应的文件进行读取的时候,控制不够严格,就导致恶意文件下载这么一个漏洞。

理论上:当前端传进来一个文件名,应该首先进行一个校验,确认一下这个是否在被允许下载的文件范围内,如果不在,应该会返回文件不存在。

命令注入的防范措施:

(1)对传入的文件名进行严格的限制和过滤

(2)对文件下载的目录进行严格的限制

2:不安全的文件上传漏洞

  在实际应用中,通常由于业务功能的需要,许多WEB网站都需存在文件上传的接口,

例如:(1)注册时上传头像图片(例如:jpg,png,gif等);

          (2)上传文件附件(doc,xls等)

然而,在后台开发时并没有对文件上传功能进行安全考虑,或采用了有缺陷的措施等,导致敌手可以通过一些手段绕过安全措施,进而传一些恶意文件,

例如:一句话木马等,从而通过对该恶意文件的访问来达到控制整个web后台的目的。

一个目标站点是否存在这样的漏洞,具体思路如下:

文件上传漏洞测试流程:

       (1)对文件上传的地方按照要求上传图片,查看返回结果(是否有路径等提示信息)

      (2)尝试上传不同类型的“恶意文件”,例如xx.php文件,分析结果;

     (3)查看html源码,是否是仅通过JS在前端做了上传限制,可以绕过。

     (4)尝试使用不同方式进行绕过黑白名单绕过/MIME类型绕过/目录0x00截断绕过

     (5)猜测或者结合其他漏洞(例如敏感信息泄露等)得到木马路径,连接测试;

************************************************************实验演示————文件上传漏洞之客户端验证:**********************************************************

客户端绕过的案例演示文件上传的漏洞:

首先先上传的PHP文件试探  看看返回结果(因为要求是上传图片,这样做看看有没有对文件类型做限制) 

********弹出上面的框,猜测这个限制是否是在前端做的?随即查看页面源代码

****分析可知: 这个函数通过JS去验证上传的内容是不是后缀名jpg,png,gif,如果不是,那么弹出对应框,完全是通过前端js做了相关限制,

所有前端做的操作只能起到辅助作用,很容易被绕过。我们可以通过控制台修改代码,从而可以上传PHP文件。那函数删掉之后,就不会执行JS的代码。

删掉如下图所示:

改完之后,重新进行上传system.php。其中system.php为一句话木马文件:文件内容如下:

上传成功

关键点:我们上传的文件,一定要知道文件上传到哪儿了?

上述仅仅是为了测试,设计将路径显示出来也就是上传到什么路径下面了,实际中需要自行去猜测,或者结合其他漏洞去判断其路径。因为我们最终的目的是为了访问这个文件,如上如,通过x参数去访问,为什么?还要看一句话木马文件里面的文件内容。

通过x参数传一个Linux操作系统的命令,看看能否执行?

执行成功,我们通过客户端的绕过,上传了一个非预期的文件(本来要求图片,上传木马文件)通过对木马文件的访问,控制了整个后台服务器。

一定要知道上传文件被保存的路径,在实际中,需要利用相关手段做猜测

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值