前言:
之前没有接触过这个知识,恰好这次有一道题考了这方面的知识,就来详细的学习一下任意文件下载漏洞
任意下载漏洞简介
由于业务需求,很多网站往往需要提供文件(附件)下载的功能块,但是如果对下载的文件没有做限制,直接通过绝对路径对其文件进行下载,那么,恶意用户就可以利用这种方式下载服务器的敏感文件,对服务器进行进一步的威胁和攻击。
任意下载漏洞的危害
通过任意文件下载,可以下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息,以及对内网的信息探测等等。
通过上面的简单介绍,可以看出任意下载漏洞是很常见的,如果对用户查看或下载的文件不做限制,就又可能被利用,从而造成损害,接下来就来学习下任意下载漏洞是如何利用的。
任意下载漏洞的利用方式
存在方式
从链接上看,类似这些,有可能就存在任意下载漏洞
1 | download.php?path= |
题目解析
这里就以一道题来做为例子
查看源码,发现这个格式,猜测可能是任意文件下载或文件包含
打开发现是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 | inurl : readfile.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 | C:\boot.ini //查看系统版本 |
linux
1 | root/.ssh/authorized_keys////如需登录到远程主机,需要到.ssh目录下,新建authorized_keys文件,并将id_rsa.pub内容复制进去 |
漏洞验证
1 | xxx.php?f=../../../../../../etc/passwd |
参数f的参数值为PHP文件时:
1.文件被解析,则是文件包含漏洞
2.显示源代码,则是文件查看漏洞
3.提示下载,则是文件下载漏洞
各种文件路径
最后提供一个大佬总结的资源
总结
太菜了,还得好好学,在下写的不是很详细,出门左拐看qwzf大佬的博客