原理:
任意文件读取漏洞属于文件操作类漏洞,一般常见于PHP/java/python语言中。任意文件读取漏洞,就是可以任意读取服务器上部分或者全部文件的漏洞,攻击者利用此漏洞可以读取服务器敏感文件如/etc/passwd,/etc/sadow,web.config。漏洞一般存在于文件下载参数,文件包含参数。主要是由于程序对传入的文件名或者文件路径没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露。
任意文件读取漏洞的原理其实就是由于程序对客户端传入的参数未作合法性的检验造成的,举了例子:在业务常见中存在一个url:http://www.download.com/index.php?filename=code.php。此URL的业务功能主要是包含进code.php文件中的程序代码,然后在index.php文件中执行相关的代码,但是由于filename参数未作校验,攻击者可以构造url :http://www.download.com/index.php?filename=c:\windows\win.ini 或者构造http://www.download.com/index.php?filename=/etc/shadow ,然后去访问,结果攻击者就读取到了win.ini内容和操作系统shadow,对于操作系统的shadow文件,大家应该比较清楚,是保存操作系统密码串的文件,这样攻击者就可以对密码串进行破解,获取到操作系统的SSH密码。
产生的原因:
1.存读取文件的函数
2.读取文件的路径用户可控,并且未校验或者校验不严
3.输出了文件内容
危害:
通过任意文件读取/下载,可以读取/下载服务器的任意文件,web业务的代码,服务器和系统的具体配置信息,也可以下载数据库的配置信息等
任意文件读取
<?php
$filename=”test.txt”;
readfile($filename);
?>
<?php
$filename=”test.txt”;
Echo fiile_get_contents($filename);
?>
文件读取函数:readfile()、file_get_contents()、fopen()中,$filename没有经过校验或者校验不合格,用户可控制变量读取任意文件,如/etc/passwd、./index.php。
文件下载
·<a href=”http://www.a.com/ccc.rar”>下载</a>
在上述代码中,$filename 没有经过校验,或者校验不合格,用户可以控制这个变量读取任意的文件,比如/etc/passwd、../index.php等等。这样就造成了任意文件下载漏洞
利用方式:
任意文件读取/下载漏洞的利用方式比较简单,但也要看web系统的实际情况来读取下载文件,对于weblogic中间件,如果攻击者想通过任意文件读取漏洞Getshell,那攻击者可以利用任意文件读取漏洞下载weblogic的密码文件和filter,然后破解console控制台密码,部署shell;对于tomcat中间件,利用任意文件下载漏洞读取控制台密码文件tomcat-users.xml