pikachu学习——文件下载和上传漏洞

 

文件下载漏洞概述:

       很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件,但是,如果文件下载功能设计不当,则可能导致攻击者可以通过构造文件路径,从而获取到后台服务器上的其他敏感文件。(又称:任意文件下载)

 

下面我在pikachu文件下载漏洞页面演示一下

进入页面,随便点击一位球员图片进行下载

 

 

 

我们发现文件可以进行下载

它的完整链接应该是http://192.168.131.246/pikachu-master/pikachu-master/vul/unsafedownload/down_nba.php?filename=ai.png

前端传递信息到后端,后端查找ai.png文件又输出到前端,用户可以在前端下载信息,

这么一解释是不是让我们想起了文件包含漏洞,同样,我们利用这个漏洞方式和文件包含漏洞类似,直接修改前端链接去获取信息

比如说猜测它是linux操作系统,那我们就可以去获取它的用户的密码信息

http://192.168.131.246/pikachu-master/pikachu-master/vul/unsafedownload/down_nba.php?filename=../../../../../../../etc/password

 

像这种命令注入漏洞的防范措施:

1.对传入的文件名进行严格的过滤和限定

2.对文件的下载目录进行严格的限定

 

文件上传漏洞概述:

     

      文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按照设计的格式进行重命名后存储在指定的目录。 如果说后台对上传的文件没有进行任何的安全判断或者判断条件不够严谨,则攻击着可能会上传一些恶意的文件,比如一句话木马,从而导致后台服务器被webshell。

所以,在设计文件上传功能时,一定要对传进来的文件进行严格的安全考虑。比如:
          --验证文件类型、后缀名、大小;
          --验证文件的上传方式;
          --对文件进行一定复杂的重命名;
          --不要暴露文件上传后的路径;
          --等等...

 

文件上传漏洞测试流程:

 

 

 

文件上传漏洞-客户端验证(client check): 

    我们上传文件发现只能上传图片,其它文件都会被拒绝

 

 

 

 

 

 

我们可以打开浏览器web控制台,看一下它是怎么对我们上传的文件进行判断

 

 

 当input标签发生onchange即状态改变时调用checkFileExt方法

 

我们可以查看一下源码

 

 

 

 

我们发现它的判断文件操作完全基于前端的javascript,写入checkFileExt方法只接受文件扩展名为“jpg,png,gif”的文件

 

那我们就可以在前端直接修改源码将调用checkFileExt方法删除,然后传一个一句话木马的php文件

 

 

 

 

 

 

 

 

 

 接下来我们就可以去访问文件的路径去获取页面后台信息(访问前关闭代理)

http://192.168.131.246/pikachu-master/pikachu-master/vul/unsafeupload/uploads/a.php?x=ipconfig

 

 

 

 

文件上传漏洞-服务端验证:

我主要演示两个方式的文件上传漏洞:MIME类和Getimagesize类

 

MIME类:

演示之前我们需要了解MIME和$_FILES函数

 

 

 

 

 

 

进入页面,我们发现还是只能提交图片文件,我们直接查看一下源码

 

 

 

我们发现后端依然对文件类型进行了检测,

接下来我们上传一句话木马的php文件并抓包

 

 

 

 

 

 

将抓到的包发送到repeater模块,将底部content-Type改为image/jpg(任意图片格式),点击发送

 

 

 

 

 

我们看到了文件保存路径,

接下来我们就可以构造链接进行访问(访问前关闭代理)

http://192.168.131.246/pikachu-master/pikachu-master/vul/unsafeupload/uploads/a.php?x=ipconfig 

 

 

 Getimagesize类:

getimagesize() 函数概述:

    getimagesize() 函数用于获取图像大小及相关信息,成功返回一个数组,失败则返回 FALSE 并产生一条 E_WARNING 级的错误信息。

语法格式:

array getimagesize ( string $filename [, array &$imageinfo ] )

getimagesize() 函数将测定任何 GIF,JPG,PNG,SWF,SWC,PSD,TIFF,BMP,IFF,JP2,JPX,JB2,JPC,XBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型及图片高度与宽度。

 

 

Getimagesize()返回结果中有文件大小和文件类型,如果用这个函数来获取类型,从而判断是否是图片的话,会存在问题。

 

我们首先需要制作图片木马

 

 直接用方法1

 

桌面建一个c.php文件,一个c.png文件

 

 

 

 命令行输信息

 

 

 

木马文件abc.png制作成功 

 

 

 在页面上传图片木马,获得文件路径

然后我们就可以制作链接去获取信息

 

文件上传漏洞防范措施:

 

posted @ 2020-04-06 17:04  一个aaa  阅读(1338)  评论(0编辑  收藏  举报