字面意思理解,就是你能够读取任何 你有权限读取到
的文件,但有一个最主要的问题就是,你不知道 文件名
一般情况下,任意文件读取/下载漏洞存在于 可下载资源,可读取文件的接口,比如网站读取指定图片
http://www.example.com/filedown.php?filename=testpic.png
或者是学校网站给下载文档的地方
http://www.example.com/filedown.php?file=xxxxx&filetype=doc
那么通过修改参数,就可以进行任意文件读取/下载
http://www.example.com/filedown.php?filename=../../../../../../../../../../etc/passwd
要注意的是,部分网站可能存在编码问题,所以构造的时候需要将 /
转为url编码 %2f
http://www.example.com/filedown.php?filename=..%2f..%2f..%2f..%2f..%2f..%2f..%2f..%2fetc%2fpasswd
可以说,任意文件读取/下载漏洞存在后,最经典的还是下载 /etc/passwd
文件
在我利用的漏洞中,这个文件也可以说是最关键的文件,下面有两种思路
根据当前目录,配合请求的url,来对文件进行读取,接着慢慢的通过源码,读取整个网站关联到的文件
例如
那么通过a href就可以得到 DisplayFIle.php
这个文件名
http://www.example.com/filedown.php?filename=./filedown.php
通过读取 displayfile.php
这个文件,在获取到其他文件的名字,最后找到敏感代码文件,审计绕过
这是我最爱的思路,因为我根本懒得审计代码
通过下载 /etc/passwd
文件,我们可以得到这台机器上的所有文件,以及用户主目录
最好的情况就是,你当前的用户,就能去下载 /root/.bash_history
文件,如果不行的话,可以考虑用以下脚本
执行后,会自动获取用户主目录,然后一个一个去尝试下载,最后下载下来审计用户操作记录,我有一次就是利用这个方法,最后定位到用户,接着深入挖掘
那么有了 .bash_history
后,就可以开始审计操作记录了,首先我们要确定一个东西,那就是任何终端输入的东西,都会被记录到 .bash_history
中,比如 mysql-u root-p123456
这样一来,我们就相当于直接获取到了mysql的账号密码
上图是我挖edu的时候,读到的东西
除此之外,通过用户history,我们还可以下载到所有的例如网站备份脚本,网站备份文件,调用其他网站的api key 和 api id
如果存在备份脚本的话,还可通过审计脚本,逆推着写一个脚本来下载备份数据库文件,贴一张我漏洞报告中的记录
下载到 mysql_backup.sh
后,进行审计,然后写出脚本获取备份文件
除了思路1那种审计网站的思路外,我最常用的其实就是,跟着管理员的操作来进行文件读取,因为有的网站是直接外面写好后,传入里面解压后,才部署的网站,如果管理员没删除部署文件的话,直接整站下载美滋滋
在针对登录的页面,进行审计绕过,也不失为一种方式,但是我还是偏向于,读取备份文件、网站脚本、网站配置文件