zwj611

7、文件处理漏洞

一、任意文件上传漏洞

(一)、上传漏洞原理

  1、web应用程序在处理用户上传的文件操作时,如果用户上传文件的路径,文件名、扩展名成为用户的可控数据,就会导致直接上传脚本木马到web服务器上,直接控制web服务器。

  2、文件上传时检查不严格,对文件格式没有进行检验,客户端进行了格式验证,但是很简单,很容易被绕过,服务器端进行了不严格的黑/白名单检查(忽略大小写,将php改为Php就可以绕过,忽略了%00截断符,xxx.php%00.jpg保存时变成xxx.php);只对文件类型(content-type)进行了检查。

  3、文件上传后修改文件名时处理不当,允许用户修改文件名后缀

  4、混合模式,有文件上传时常用的方法,可以接受同时提交不同类型的数据,表单里可以把类型更改为file就可以上传<input type="file" name ="file" id ="file"/>,类型后面一般会跟boundary来告知数据区域分隔符。

  5、每个数据都可以单独说明数据类型,获取文件时,可以使用响应参数:

  PHP的代码如下:

  $_Files["file"]["name"] -文件名

  $_Files["file"]["type"]-类型

  $_FIles["file"]["size"]-文件大小

  $_FIles["file"]["tmp_name"]-临时文件路径

  6、服务端语言对上传文件类型限制方法---对文件类型进行限制(Content_Type)

  此类设置,很容易被绕过,直接使用burpsuite等软件更改为允许的类型

  ---对文件名后缀进行限制(黑白名单)-----可能使用%00等截断方式绕过,使用大小写方式绕过黑名单。

  --上传任意文件,可能会造成文件是一个webshell,可以任意执行系统命令,与后台数据库链接,任意执行数据库命令,把本服务器当做跳板,访问局域网内任意服务器。

   ----任意文件上传漏洞可能会让用户完全控制本机,直接获取登录权限。

(二)任意文件上传漏洞检测方法--

  1、检测代码

  检测点:检测所有可以上传漏洞的页面

  检测方法:使用什么方式来限制文件类型(后缀名,Content-Type),是否对文件名进行重命名,是否允许用户重名文件名

  2、检测功能

  检测点:检测所有可以上传漏洞的页面

  上传检测方法:尝试上传多后缀文件,并查看是否能被截断a.php.jsp,尝试上传文件,与Content-Type不符,尝试更改文件名。

  检测方法:是否能执行之前上传漏洞里的代码

(三)、如何防御任意文件上传漏洞

  答:文件上传目录设置为不可执行,判断文件类型,不仅仅需要对Content-Type来进行判断,也需要对后缀名进行判断;使用白名单策略,对于图片处理,使用resize(或类似)函数来破坏源代码;使用随机函数来存储文件,防止.php.jpg等多后缀引起的漏洞;单独设置文件服务器的域名,这个服务器不能运行任何动态网页,只能静态访问HTML、图片等。

二、任意文件下载漏洞

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

  下载服务器任意文件,如脚本代码,服务及系统配置文件等可用得到的代码进一步代码审计,得到更多可利用漏洞

如何查找任意文件下载漏洞?

  查找传入文件名的参数,导入文件等参数,要是直接输入文件名,就有可能有注入点,参数名:realpath,filepath、filePath,path,Path,inputFile,url,urls,Lang,dis,data,readfile,filep,src,menu,Meta-INF,WEB-INF

  代码中如何查找漏洞,以php为例子,如有下载代码,就有可能存在任意文件下载漏洞,readfile,fopen,file_get_contents

  敏感文件路径,--winows

  c:\boot.ini   看系统版本

  c:\windows\system32\inetsrv\MetaBase.xml  是IIS的配置文件

  c:\windwos\repair\sam    存储系统初次安装的密码

  c:\progam Files\mysql\my.ini  Mysql配置

  c:\program Files\mysql\data\user.MYD   mysql root

  c:\windows\php.ini   php配置信息

  c:\windows\my.ini   mysql配置信息

  敏感文件路径,--Linux

  /root/.ssh/authorized_keys

  /root/.ssh/id_rsa

  /root/.ssh/id_ras.keystore

  /etc/passwd /etc/shadow

  /etc/my.cnf

  /etc/httpd/conf/httpd.conf

  /root/.bash_history

  /root/.mysql_history /proc/self/fd/fd[0-9]*

  /proc/mounts;这里可以看挂载点

  /porc/config.gz

修复文件下载漏洞

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

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

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

 

  

 

posted on 2023-06-12 17:08  yaphetss  阅读(37)  评论(0编辑  收藏  举报

导航