当前位置:   article > 正文

web渗透测试----7、任意文件读取、下载漏洞_java任意文件读取、下载漏洞

java任意文件读取、下载漏洞


一、漏洞介绍

网站给用户提供了文件读取和下载的功能,但是没有对查看和下载功能做过多限制,未对用户输入的文件名作安全校验处理,导致用户可以查看和下载任意文件。

文件读取和下载在PHP和JAVA语⾔中尤为常见,主要出现在文件操作的功能点。

PHP中功能点:

file_get_contents()readfile()fread()fgets()fpassthru()require()require_once()include()include_once()
  • 1

JAVA中功能点:

java.io.FileInputStream()java.nio.file.Files.readAllLines()java.nio.file.Files.readAllBytes()java.io.RandomAccessFile()java.nio.channels.AsynchronousFileChannel.read()org.apache.commons.io.FileUtils.readFileToString()
  • 1
部分文件读取案例:
1、Elasticsearch任意文件读取(CVE-2015-3337)
2、GitLab 任意文件读取(CVE-2016-9086)
3、Node.js任意文件读取(CVE-2017-14849)
4、Weblogic任意文件读取(CVE-2019-2615)
5、Spring Cloud Config Server任意文件读取(CVE-2019-3799)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

二、漏洞危害

1、可以读取或者下载服务器的配置文件,脚本文件
2、读取或者下载数据库的配置文件
3、读取网站源码文件,进行代码审计
4、对内网的信息进行探测等。


三、常见形式

1、任意文件读取

<?php            
$filename=”1.txt”;
readfile($filename);
?>
  • 1
  • 2
  • 3
  • 4
<?php
$filename=”1.txt”;
echo file_get_contents($filename);
?>
  • 1
  • 2
  • 3
  • 4

这两段代码有一个共同点是:$filename是没有经过任何校验的,用户可以控制$filename读取任何文件。

2、任意文件下载的方式

2.1、直接下载

<a href=”http://www.a.com/xxx.rar”>下载</a>
  • 1

以get形式通过a标签直接对文件进行下载,但是没有对下载的文件做任何限制。

2.2、header头

<?php
    $filename = $_GET['filename'];
    echo '<h1>开始下载文件!</h1><br /><br />';
    echo file_get_contents($filename);

    header('Content-Type: imgage/jpeg');
    header('Content-Disposition: attachment; filename='.$filename);
    header('Content-Lengh: '.filesize($filename));
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

以post方式直接对文件下载,也是没有进行校验


四、漏洞绕过

1、未进行任何防御

在这里插入图片描述
在这里插入图片描述

2、双写进行绕过

在这里插入图片描述

3、利用编码进行绕过

在这里插入图片描述

4、利用%00截断后缀绕过

在这里插入图片描述

5、利用文件路径绕过

在这里插入图片描述


五、常见的敏感文件

用户目录下的敏感文件
1、 .bash_history
2、 .zsh_history
3、 .profile
4、 .bashrc
5、 .gitconfig
6、 .viminfo
7passwd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
应用的日志文件
1、 /var/log/apache2/access.log
2、 /var/log/nginx/access.log
  • 1
  • 2
  • 3
站点目录下的敏感文件
1、 .svn/entries
2、 .git/HEAD
3、 WEB-INF/web.xml
4、 .htaccess
5、 robots.txt
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
特殊的备份文件
1、 .swp
2、 .swo
3、 .bak
4、 index.php
  • 1
  • 2
  • 3
  • 4
  • 5
Windows系统常用系数

C:\boot.ini  //查看系统版本
C:\Windows\System32\inetsrv\MetaBase.xml  //IIS配置文件
C:\Windows\repair\sam  //存储系统初次安装的密码
C:\Program Files\mysql\my.ini  //Mysql配置
C:\Program Files\mysql\data\mysql\user.MYD  //Mysql root
C:\Windows\php.ini  //php配置信息
C:\Windows\my.ini  //Mysql配置信息
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Linux系统常用系数
/etc/passwd    //存储一般的用户信息,任何人都可以访问
格式: root:x:0:0:root:/root:/bin/bash

/etc/shadow    //存储用户的密码信息,只有root用户可以访问
格式:root:$6$Fsf6Q6SH$MlagWih0lcGFxtAo7/s8Z5.wywJyCqH6qateZ6yPFOPm8bNYTGAEPygZxSOPR1A9Rtw.WxJp2fNMOoeB1wj890:17524:0:99999:7:::

/etc/hosts     //包含了ip地址和主机名之间的映射
 
/root/.bash_history   //root的bash历史记录
 
/root/.ssh/authorized_keys   //记录每个访问计算机用户的公钥

/etc/my.cnf      //mysql的配置文件
/root/.mysql_history  //mysql的bash历史记录

/root/.wget-hsts
 
/opt/nginx/conf/nginx.conf  //nginx的配置文件
 
/var/www/html/index.html  

/etc/apache2/apache2.conf    //apache的配置文件  
 
/etc/httpd/conf/httpd.conf  //httpd的配置文件
 
 
/proc/self/fd/fd[0-9]*(文件标识符)
 
/proc/mounts    //查看系统上挂载的文件系统
 
/porc/config.gz     //使用gzip压缩的当前的 Linux 内核配置文件

/proc/sched_debug // 提供cpu上正在运行的进程信息,可以获得进程的pid号,可以配合后面需要pid的利用
 
/proc/mounts // 挂载的文件系统列表
 
/proc/net/arp //arp表,可以获得内网其他机器的地址
 
/proc/net/route //路由表信息
 
/proc/net/tcp and /proc/net/udp // 活动连接的信息
 
/proc/net/fib_trie // 路由缓存
 
/proc/version  // 内核版本
 
/proc/[PID]/cmdline // 可能包含有用的路径信息
 
/proc/[PID]/environ //  程序运行的环境变量信息,可以用来包含getshell
 
/proc/[PID]/cwd     // 当前进程的工作目录
 
/proc/[PID]/fd/[#]  // 访问file descriptors,某写情况可以读取到进程正在使用的文件,比如access.log
 
/var/log/cron    // 查看crontab的相关信息 

/var/log/lastlog    //记录系统上所以账号最近一次的登录情况
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
ssh相关文件信息
 
/root/.ssh/id_rsa     //ssh私钥信息
 
/root/.ssh/id_rsa.pub      //ssh公钥信息
 
/root/.ssh/authorized_keys  //如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进
 
/etc/ssh/sshd_config     //ssh配置文件
 
/etc/sysconfig/network-scripts/ifcfg-eth0   //etho信息

/etc/syscomfig/network-scripts/ifcfg-eth1   //eth1信息

/var/log/secure    //只要牵涉到『需要输入帐号口令』的软件,那么当登陆时 (不管登陆正确或错误) 都会被记录在此文件中(包含ssh的登录记录)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

不同的系统配置文件不太一样,需要根据系统的网络架构去查找相关的配置文件。

六、漏洞修复

1、对用户输入的参数进行校验;
2、限定用户访问的文件范围;
3、使用白名单;
4、过滤…/,防止用户进行目录遍历;
5、文件映射,存储和应用分离。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/309165
推荐阅读
相关标签
  

闽ICP备14008679号