PHP代码审计笔记--任意文件下载漏洞
在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件。
0x01 客户端下载
常见于系统中存在文件(附件/文档等资源)下载的地方。
漏洞示例代码:
. <?php
. $filename = $_GET['filename'];
. echo file_get_contents($filename);
. header('Content-Type: imgage/jpeg');
. header('Content-Disposition: attachment; filename='.$filename);
. header('Content-Lengh: '.filesize($filename));
. ?>
文件名用户可控,导致存在任意文件下载漏洞,攻击者提交url:
- test.php?filename=test.php
即可下载test.php源码,可实现跨目录下载系统中的任意文件。

0x02 服务端下载
常见于系统第三方补丁升级/插件安装、远程图片本地化。
任意文件读取
漏洞示例代码:
<?php
$filename = $_GET['filename'];
readfile($filename);
?>
可以看到参数并未进行任何过滤或处理,直接导入readfile函数中执行,导致程序在实现上存在任意文件读取漏洞。

相对路径 物理路径 fuzz
Windows:
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配置信息
...
Linux:
/root/.ssh/authorized_keys
/root/.ssh/id_rsa
/root/.ssh/id_ras.keystore
/root/.ssh/known_hosts
/etc/passwd 查看用户文件文件
/etc/shadow 查看密码文件
/etc/my.cnf
/etc/httpd/conf/httpd.conf 查看apache的配置文件
/root/.bash_history 查看历史命令
/root/.mysql_history
/proc/self/fd/fd[-]*(文件标识符)
/proc/mounts
/porc/config.gz
index.php?f=../../../../../../etc/passwd
/root/.ssh/authorized_keys/root/.ssh/id_rsa/root/.ssh/id_ras.keystore/root/.ssh/known_hosts //记录每个访问计算机用户的公钥/etc/passwd/etc/shadow/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参数
修复建议:要下载的文件地址保存至数据库中。文件路径保存至数据库,让用户提交文件对应ID下载文件。
参考链接:https://wenku.baidu.com/view/4f8e19e0b1717fd5360cba1aa8114431b90d8ee0.html
PHP代码审计笔记--任意文件下载漏洞的更多相关文章
- 【代码审计】XYHCMS V3.5任意文件下载漏洞分析
0x00 环境准备 XYHCMS官网:http://www.xyhcms.com/ 网站源码版本:XYHCMS V3.5(2017-12-04 更新) 程序源码下载:http://www.xyhc ...
- 【代码审计】CLTPHP_v5.5.3后台任意文件下载漏洞分析
0x00 环境准备 CLTPHP官网:http://www.cltphp.com 网站源码版本:CLTPHP内容管理系统5.5.3版本 程序源码下载:https://gitee.com/chich ...
- 【代码审计】ThinkSNS_V4 任意文件下载漏洞分析
0x00 环境准备 ThinkSNS官网:http://www.thinksns.com 网站源码版本:ThinkSNS V4 更新时间:2017-09-13 程序源码下载:http://www ...
- 【代码审计】EasySNS_V1.6 前台任意文件下载漏洞分析
0x00 环境准备 EasySNS官网:http://www.imzaker.com/ 网站源码版本:EasySNS极简社区V1.60 程序源码下载:http://es.imzaker.com/i ...
- 代码审计-(Ear Music).任意文件下载漏洞
0x01 代码分析 后台地址:192.168.5.176/admin.php admin admin 安装后的界面 在后台发布了一首新歌后,前台点进去到一个“下载LRC歌词”功能点的时候发现是使用re ...
- 任意文件下载漏洞的接口URL构造分析与讨论
文件下载接口的URL构造分析与讨论 某学院的文件下载接口 http://www.****.edu.cn/item/filedown.asp?id=76749&Ext=rar&fname ...
- 代码审计-phpcms9.6.2任意文件下载漏洞
漏洞文件: phpcms\modules\content\down.php 1.在download函数中对文件的校验部分 首先 if(preg_match('/(php|phtml|php3|php4 ...
- ASP代码审计学习笔记 -5.文件下载漏洞
文件下载漏洞 漏洞代码: <% function download(f,n) on error resume next Set S=CreateObject("Adodb.Stream ...
- dzzoffice 任意文件下载漏洞分析
dzzoffice 任意文件下载 \updload\dzz\system\save.php第72行开始: elseif($_GET['do']=='move'){ $obz=trim($_ ...
随机推荐
- windows 下安装 redis
Redis 是一个高性能的key-value数据库, 使用内存作为主存储,数据访问速度非常快,当然它也提供了两种机制支持数据持久化存储.比较遗憾的是,Redis项目不直接支持Windows,Windo ...
- radio切换,点击方法onclick
<label><input name="Status1" type="radio" value="first" check ...
- 记录一下寄几个儿的greendao数据库升级,可以说是非常菜鸡了嗯
之前使用的greendao数据库存储服务器所有的历史推送消息,但是后来消息需要加几个新的字段 举个栗子,比如要新增红色框住的字段到数据库中: 本仙女作为一只思想成熟的菜鸡,当然是加了字段就赶紧重新往里 ...
- CentosMySQL5.6安装方法
1. download rpm包先确定系统版本[root@xcldtc5m /]# cat /proc/versionLinux version 2.6.32-431.el6.x86_64 (mock ...
- Python 文件操作二
readlines就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素 #coding=utf-8 f = ...
- this小案例
public class Son extends Parent { public String name="jack"; public void init(){ super.ini ...
- USB学习笔记连载(七):CY7C68013A 无法识别的可能原因
最近一直在调试视频 采集卡,和PC端连接的是USB接口,使用的是cypress的CY7C68013A-56PVXC. //======================================= ...
- TI webench 一款不错的软件
之前在一些电子论坛的网站看到过关于TI webench的介绍,今天适用了一下,确实功能很强大,设计内容可以输入你所要设计的内容,包括下面内容: 下图是笔者设计的一个FPGA供电系统,采用5V输入, ...
- Opengl绘制我们的小屋(一)球体,立方体绘制
这个系列我想用来运用opengl红皮书的前八章节的内容,来打造一个室内小屋. 这一章主要是定义几个基本的结构.并给出球体与立方体的画法,先让我们来定义一些基本的结构.一个是包含点,法向量,纹理贴图向量 ...
- 多线程系列四:AQS-AbstractQueuedSynchronizer
什么是AbstractQueuedSynchronizer?为什么我们要分析它? AQS:抽象队列同步器,原理是:当多个线程去获取锁的时候,如果获取锁失败了,当前线程就会被打包成一个node节点放入 ...