文件下载与上传

任意文件下载

由于业务需求,很多网站往往需要提供文件(附件)下载的功能块,但是如果对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。

漏洞危害:

通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等。

漏洞特征:

1.Google search

利用inurl:"readfile.php?file="

2.从链接上看,形如:

    • download.php?path=

    • download.php?file=

    • down.php?file=

    • data.php?file=

    • readfile.php?file=

    • read.php?filename=

3.从参数名看,形如:

    • &RealPath=

    • &FilePath=

    • &filepath=

    • &Filepath=

    • &Path=

    • &path=

    • &inputFile=

    • &Inputfile=

    • &url=

    • &urls=

    • &Lang=

    • &dis=

    • &data=

    • &Data=

    • &readfile=

    • &filep=

    • &src=

    • &menu=

    • META-INF

    • WEB-INF

4. index.php?f=../../../../../../etc/passwd

 index.php?f=../index.php

 index.php?f=file:///etc/passwd

 readfile.php?file=/etc/passwd

 readfile.php?file=../../../../../../../../etc/passwd

 readfile.php?file=../../../../../../../../etc/passwd%00(00截断)

注:当参数f的参数值为php文件时,若是文件被解析则是文件包含漏洞,

若显示源码或提示下载则是文件查看与下载漏洞

漏洞绕过:

1.若过滤字符或字母可尝试编码绕过

2.利用 ../../

but有些代码会进行过滤(具体要根据代码进行测试),会把 ../ 置空

利用....// 代替 ../

利用..// 代替 /

具体怎么绕过还是得看代码是怎么写的

3.注意

①.注意 ../ 的数量,他代表查询目录父目录的数量

②.当我们遇到一个任意文件下载漏洞时首先要注意下载的权限问题。因为权限决定我们能下载的文件范围。

③.有些网站(主要是针对系统)并不会在URL里显示给你看,这时候你需要抓包,从数据包里修改路径,达到任意文件读取。

漏洞防护:

过滤.(点),使用户在url中不能回溯上级目录

正则严格判断用户输入参数的格式

php.ini配置open_basedir限定文件访问范围

任意文件下载

因为其在代码层面已经拼接了download目录,所以使用绝对路径是没办法进行下载的(在文件包含中也是拼接了目录)

 

任意文件上传

文件上传漏洞是web安全中经常用到的一种漏洞形式。是对数据与代码分离原则的一种攻击。上传漏洞顾名思义,就是攻击者上传了一个可执行文件如木马,病毒,恶意脚本,WebShell等到服务器执行,并最终获得网站控制权限的高危漏洞。

漏洞危害:

上传漏洞与SQL注入或 XSS相比 , 其风险更大 , 如果 Web应用程序存在上传漏洞 , 攻击者上传的文件是Web脚本语言,服务器的Web容器解释并执行了用户上传的脚本,导致代码执行。如果上传的文件是Flash的策略文件crossdomain.xml,黑客用以控制Flash在该域下的行为。如果上传的文件是病毒、木马文件,黑客用以诱骗用户或者管理员下载执行。如果上传的文件是钓鱼图片或为包含了脚本的图片,在某些版本的浏览器中会被作为脚本执行,被用于钓鱼和欺诈。甚至攻击者可以直接上传一个webshell到服务器上 完全控制系统或致使系统瘫痪。

漏洞原理:

大部分的网站和应用系统都有上传功能,而程序员在开发任意文件上传功能时,并未考虑文件格式后缀的合法性校验或者是否只在前端通过js进行后缀检验。这时攻击者可以上传一个与网站脚本语言相对应的恶意代码动态脚本,例如(jsp、asp、php、aspx文件后缀)到服务器上,从而访问这些恶意脚本中包含的恶意代码,进行动态解析最终达到执行恶意代码的效果,进一步影响服务器安全。

漏洞绕过:

客户端检测绕过(js检测):

利用firebug禁用js或使用burp代理工具可轻易突破。

服务端MIME检测绕过(Content-Type检测):

使用burp代理,修改Content-Type的参数

服务端扩展名检测绕过:

文件名大小写绕过,例如Php,AsP等类似的文件名

后缀名字双写嵌套,例如pphphp,asaspp等

可以利用系统会对一些特殊文件名做默认修改的系统特性绕过

可以利用asp程序中的漏洞,使用截断字符绕过

可以利用不再黑名单列表中却能够成功执行的同义后缀名绕过黑名单的限制

可以利用解析/包含漏洞配合上传一个代码注入过的白名单文件绕过

0x00截断

文件名后缀就一个%00字节,可以截断某些函数对文件名的判断。在许多语言函数中处理函数中,处理字符串中

图片木马

漏洞防御:

1、文件上传的目录设置为不可执行

只要web容器无法解析该目录下面的文件,即使攻击者上传了脚本文件,服务器本身也不会受到影响,因此这一点至关重要。

2、判断文件类型

在判断文件类型时,可以结合使用MIME Type、后缀检查等方式。在文件类型检查中,强烈推荐白名单方式,黑名单的方式已经无数次被证明是不可靠的。此外,对于图片的处理,可以使用压缩函数或者resize函数,在处理图片的同时破坏图片中可能包含的HTML代码。

3、使用随机数改写文件名和文件路径

文件上传如果要执行代码,则需要用户能够访问到这个文件。在某些环境中,用户能上传,但不能访问。如果应用了随机数改写了文件名和路径,将极大地增加攻击的成本。再来就是像shell.php.rar.rar和crossdomain.xml这种文件,都将因为重命名而无法攻击。

4、单独设置文件服务器的域名

由于浏览器同源策略的关系,一系列客户端攻击将失效,比如上传crossdomain.xml、上传包含Javascript的XSS利用等问题将得到解决。

文件上传之客户端

 

在此位置仅是在客户端的进行了js限制,只需要在源代码中修改js即可完成上传

 

 

文件上传之服务的MIME

 

在此页面,无法在修改js来使得上传成功,但是可以去修改Content-Type的参数,将其修改为image/jpeg即可上传成功

文件上传之getimagesize

 

getimagesize这个函数功能会对目标文件的16进制去进行一个读取,去读取头几个字符串是不是符合图片的要求。

在这里可以采用制作图片木马的方法来进行绕过

 

相对路径相关文章

https://blog.csdn.net/zhangshab/article/details/85110058

https://www.cnblogs.com/iammackong/p/3399509.html

 

posted @ 2021-03-10 16:48  可乐-kele  阅读(566)  评论(0编辑  收藏  举报