Lemon's blog

任意文件下载漏洞简析

Record my learning process of File Include.

字数统计: 1.4k阅读时长: 5 min
2019/10/24 Share

前言:

之前没有接触过这个知识,恰好这次有一道题考了这方面的知识,就来详细的学习一下任意文件下载漏洞

任意下载漏洞简介

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

任意下载漏洞的危害

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

通过上面的简单介绍,可以看出任意下载漏洞是很常见的,如果对用户查看或下载的文件不做限制,就又可能被利用,从而造成损害,接下来就来学习下任意下载漏洞是如何利用的。

任意下载漏洞的利用方式

存在方式

从链接上看,类似这些,有可能就存在任意下载漏洞

1
2
3
4
5
6
download.php?path=
download.php?file=
down.php?file=
data.php?file=
readfile.php?file=
read.php?filename=

题目解析

这里就以一道题来做为例子
在这里插入图片描述
查看源码,发现这个格式,猜测可能是任意文件下载或文件包含
在这里插入图片描述
打开发现是java编写的页面
在这里插入图片描述
这时我们就可以考虑是否可以用任意下载漏洞这种方法来做,尝试一下,但很奇怪的是无论我们构造任何参数都是Not Found,大师傅告诉我这道题需要切换请求方法才行,还是师傅经验深

输入,发现真的可以

1
filename=WEB-INF/web.xml

在这里插入图片描述
发现有两个flag的关键文件位置,先来查看一下com.wm.ctf.FlagController

1
filename=WEB-INF/classes/com/wm/ctf/FlagController.class

在这里插入图片描述
发现一串base64,解码即可得出flag

这道题涉及的知识也很多,就来详细的说一下:

首先是我们看到这是用java写的web页面,而WEB-INF是Java的WEB应用的安全目录。

WEB-INF文件夹下除了web.xml外,还存一个classes文件夹,用以放置 *.class文件,这些 *.class文件是网站设计人员编写的类库,实现了jsp页面前台美工与后台服务的分离,使得网站的维护非常方便。web.xml文件为网站部署描述XML文件,对网站的部署非常重要。

这也是我们为什么一开始就直接查看WEB-INF/web.xml的原因

这里总结一下WEB-INF常用的目录或文件

1
2
3
4
5
6
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件。
/WEB-INF/database.properties:数据库配置文件
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,最后直接class文件,在通过反编译class文件,得到网站源码

知道了这些,上面的题真心不难,只是在考察你所掌握的知识是否全面

漏洞总结

任意下载漏洞可以通过谷歌来进行搜索

1
2
inurl : readfile.php?file=
inurl : download.php?file=

从参数名上看,大致有:

1
2
3
4
5
6
7
8
9
10
11
12
&readpath=
&filepath=
&Path=
&inputfile=
&url=
&Lang=
&dis=
&data=
&readfile=
&menu=
META-INF=
WEB-INF

这些参数可能会出现漏洞(当然看管理方是怎么防护的)

总结一下linux和Windows下载利用文件

windows:

1
2
3
4
5
6
7
8
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配置信息
C:\Windows\win.ini //Windows系统的一个基本系统配置文件

linux

1
2
3
4
5
6
7
8
9
10
11
12
13
14
root/.ssh/authorized_keys////如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去
/root/.ssh/id_rsa//ssh私钥,ssh公钥是id_rsa.pub
/root/.ssh/id_ras.keystore//记录每个访问计算机用户的公钥
/root/.ssh/known_hosts //记录每个访问计算机用户的公钥
/etc/passwd
/etc/shadow//账户密码文件
/etc/my.cnf //mysql配置文件
/etc/httpd/conf/httpd.conf //apache配置文件
/root/.bash_history //用户历史命令记录文件
/root/.mysql_history //mysql历史命令记录文件
/proc/mounts //记录系统挂载设备
/porc/config.gz //内核配置文件
/var/lib/mlocate/mlocate.db //全文件路径
/porc/self/cmdline //当前进程的cmdline参数

漏洞验证

1
2
3
4
5
xxx.php?f=../../../../../../etc/passwd

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

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

参数f的参数值为PHP文件时:

1.文件被解析,则是文件包含漏洞

2.显示源代码,则是文件查看漏洞

3.提示下载,则是文件下载漏洞

各种文件路径
最后提供一个大佬总结的资源

总结

太菜了,还得好好学,在下写的不是很详细,出门左拐看qwzf大佬的博客

CATALOG
  1. 1. 前言:
  2. 2. 任意下载漏洞简介
  3. 3. 任意下载漏洞的危害
  4. 4. 任意下载漏洞的利用方式
    1. 4.0.1. 存在方式
    2. 4.0.2. 题目解析
    3. 4.0.3. 漏洞总结
    4. 4.0.4. 漏洞验证
  • 5. 总结