Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >目录遍历+任意文件读取+任意文件下载

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

作者头像
vFREE
发布于 2021-12-20 13:09:12
发布于 2021-12-20 13:09:12
5K00
代码可运行
举报
文章被收录于专栏:博客原创文章博客原创文章
运行总次数:0
代码可运行
目录遍历漏洞

原理

目录遍历又称"路径遍历",由于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
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/file.php?filename=xxx.txt

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/file.php?filename=../../../../etc/passwd

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

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

代码

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?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
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/file.php?filename=aW5kZXgucGhw
// 对应index.php

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1/file.php?filename=.%2F.%2F.%2F.%2Fetc%2Fpasswd

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

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
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
代码运行次数:0
运行
AI代码解释
复制
Windows:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    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
代码运行次数:0
运行
AI代码解释
复制
  Linux:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    /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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
搭建jenkins实现自动化部署微服务_自动化部署平台搭建
  Jenkins会随系统启动而启动。详情参照/etc/init.d/jenkins   Jenkins会创建一个用户叫做jenkins, 如果你修改了user,则要修修改所属者:/var/log/jenkins,/var/lib/jenkins,/var/cache/jenkins   如果遇到问题,查看日志/var/log/jenkins/jenkins.log   配置文件/etc/sysconfig/jenkins   默认启用8080
全栈程序员站长
2022/09/19
2.3K0
搭建jenkins实现自动化部署微服务_自动化部署平台搭建
Jenkins安装
Jenkins是一个自包含的开源自动化服务器,可用于自动化与构建,测试以及交付或部署软件有关的各种任务。 Jenkins可以通过本机系统软件包Docker安装,甚至可以由安装了Java Runtime Environment(JRE)的任何计算机独立运行。
mikelLam
2022/10/31
5230
在centos7上安装Jenkins
在centos7上安装Jenkins 安装 添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key sudo yum install jenkins 如果没有java的话要安装java sudo yum install j
Ryan-Miao
2018/03/14
1.2K0
Linux-安装 jenkins
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。 Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
acc8226
2022/05/17
2K0
Linux-安装 jenkins
工具系列 | Jenkins 构建伟大,无所不能
Jenkins 是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
Tinywan
2020/07/23
1.2K0
CentOs8 Linux安装Jenkins、部署并运行springboot项目
vim详解:点击 i 进入编辑模式即可编辑文本,编辑完之后Esc退出编辑模式, :wq 保存退出(注:这里是有【一个冒号+wq】),不保存就直接退出是 :q! (冒号+q+感叹号)
OwenZhang
2021/12/08
7090
CentOs8 Linux安装Jenkins、部署并运行springboot项目
Jenkins学习(一)——Jenkins安装
linux安装jenkins后会在你原本的系统电脑桌面上生成一个名为initialAdminPas sword的文档,使用记事本打开,将里面的内容复制过来即可。
传说之下的花儿
2023/04/16
5370
Jenkins学习(一)——Jenkins安装
jenkins安装部署
jenkins安装部署 jenkins安装部署 repo sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://
以谁为师
2019/05/31
8170
打造企业级自动化运维平台系列(四):Jenkis 基础入门与安装
随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保 软件开发的质量已经慢慢成为开发过程中不可回避的问题。
民工哥
2024/01/18
8990
打造企业级自动化运维平台系列(四):Jenkis 基础入门与安装
在CentOS7上搭建Jenkins
解决办法:配置权限,按照上面安装 jenkins 中的 第三点** [配置 jenkins 权限(点我直达)**](https://www.yuque.com/pxs/fo1e8s/aed00c02-7c81-41d0-961b-6ea527dec51f#gFsHl)重新操作一遍或者检查下哪一步骤遗漏了。
leader755
2022/03/09
9220
在CentOS7上搭建Jenkins
Jenkins实现git分支自动合并
示例代码地址:XYJenkinsPipeline: jenkins pipeline脚本 1、自动合并分支, 拉取master -> 打tag -> 合并所有dev分支 (gitee.com)
fisherlee
2022/03/17
2.7K0
Install Jenkins
参考 Installing Jenkins on Red Hat distributions
franket
2021/08/12
6260
从零学习Jenkins部署SpringBoot项目
之前项目中虽然使用过 Jenkins,但是都只是使用,没有自己搭建过,完整部署一个项目。既然工作中没有独立部署过,那么就只能自己动手实操一番,技多不压身嘛。
云原生架构说
2022/09/24
8340
从零学习Jenkins部署SpringBoot项目
CentOS 7 下Jenkins安装部署教程
Jenkins是一个开源的支持自动化构建、部署等任务的平台。基本上可以说是持续集成(CI)、持续发布(CD)不可或缺的工具。
KenTalk
2018/09/11
10.2K0
CentOS 7 下Jenkins安装部署教程
CentOS搭建Jenkins服务
去oracle java官网,获取1.8的64位的.tar.gz,(需点击accept后,点击链接,然后从地址栏拷贝下载链接)
测试邦
2019/07/24
4950
CentOS搭建Jenkins服务
jenkins实战系列
本文主要介绍了在linux 下如何部署jenkins.以及通过jenkins 如何发布php.以及java 程序,利用jenkins 来实现邮件告警及时了解项目发布过程中产生的问题。
互联网老辛
2018/12/10
1.2K0
jenkins学习之centos6.9下安装
用户1141560
2017/12/25
1.1K0
jenkins学习之centos6.9下安装
jenkins升级版本遇到的问题
jenkins页面端提示需要升级jenkins 2.361.1,由于是测试服务器,所以就升级下,然后就有不可描述的事情发生了。
嘻哈记
2022/10/05
3.5K0
jenkins升级版本遇到的问题
Centos安装jenkins及配置Nginx访问【部署工具】
1. sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
sinnoo
2020/11/13
1.1K0
Centos安装jenkins及配置Nginx访问【部署工具】
jenkins使用方法详解
Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台。这是一个免费的源代码,可以处理任何类型的构建或持续集成。集成Jenkins可以用于一些测试和部署技术。Jenkins是一种软件允许持续集成。
菲宇
2019/06/12
1.2K0
jenkins使用方法详解
相关推荐
搭建jenkins实现自动化部署微服务_自动化部署平台搭建
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验