PHP代码审计笔记--任意文件下载漏洞

摘要:
0x01客户端下载在下载文件的系统中很常见。˃用户可以控制文件名,从而导致任意文件下载漏洞。攻击者提交url:test。php?文件名=测试。php,您可以下载测试。php源代码,允许您跨目录下载系统中的任何文件。˃可以看出,参数直接导入readfile函数中执行,而无需任何过滤或处理,导致程序实现中存在任意文件读取漏洞。将文件路径保存到数据库,并让用户提交与ID对应的文件以下载文件。
  在文件下载操作中,文件名及路径由客户端传入的参数控制,并且未进行有效的过滤,导致用户可恶意下载任意文件。

 0x01 客户端下载

常见于系统中存在文件(附件/文档等资源)下载的地方。

漏洞示例代码:

1.    <?php  
2.        $filename = $_GET['filename'];  
3.        echo file_get_contents($filename);  
4.        header('Content-Type: imgage/jpeg');  
5.        header('Content-Disposition: attachment; filename='.$filename);  
6.        header('Content-Lengh: '.filesize($filename));  
7.    ?>  

文件名用户可控,导致存在任意文件下载漏洞,攻击者提交url:

  1. test.php?filename=test.php  

即可下载test.php源码,可实现跨目录下载系统中的任意文件。

PHP代码审计笔记--任意文件下载漏洞第1张

 0x02 服务端下载

常见于系统第三方补丁升级/插件安装、远程图片本地化。

任意文件读取

漏洞示例代码:

<?php
    $filename = $_GET['filename'];
    readfile($filename);
?>

可以看到参数并未进行任何过滤或处理,直接导入readfile函数中执行,导致程序在实现上存在任意文件读取漏洞。

PHP代码审计笔记--任意文件下载漏洞第2张

相对路径  物理路径  fuzz

Windows:
   C:oot.ini  //查看系统版本
   C:WindowsSystem32inetsrvMetaBase.xml  //IIS配置文件
   C:Windows
epairsam  //存储系统初次安装的密码
   C:Program Filesmysqlmy.ini  //Mysql配置
   C:Program Filesmysqldatamysqluser.MYD  //Mysql root
   C:Windowsphp.ini  //php配置信息
   C:Windowsmy.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[0-9]*(文件标识符)
   /proc/mounts
   /porc/config.gz
 
index.php?f=../../../../../../etc/passwd

  1. /root/.ssh/authorized_keys

  2. /root/.ssh/id_rsa

  3. /root/.ssh/id_ras.keystore

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

  5. /etc/passwd

  6. /etc/shadow

  7. /etc/my.cnf //mysql配置文件

  8. /etc/httpd/conf/httpd.conf //apache配置文件

  9. /root/.bash_history //用户历史命令记录文件

  10. /root/.mysql_history //mysql历史命令记录文件

  11. /proc/mounts //记录系统挂载设备

  12. /porc/config.gz //内核配置文件

  13. /var/lib/mlocate/mlocate.db //全文件路径

  14. /porc/self/cmdline //当前进程的cmdline参数

修复建议:要下载的文件地址保存至数据库中。文件路径保存至数据库,让用户提交文件对应ID下载文件。

参考链接:https://wenku.baidu.com/view/4f8e19e0b1717fd5360cba1aa8114431b90d8ee0.html

免责声明:文章转载自《PHP代码审计笔记--任意文件下载漏洞》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity表面着色器Spring声明式事务的配置~~~下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CentOS 7安装GitLab、汉化、配置邮件发送

1、更换国内yum源 1.1 备份 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 1.2 下载新的CentOS-Base.repo 到/etc/yum.repos.d/ wget -O /etc/yum.repos.d/CentOS-Base.r...

git拉代码,IntelliJ idea报错,cannot load module xxxxx

1 从git上下工程的时候,IntelliJ idea报错,cannot load module xxxx VCS-git-clone-ssh:xxxx ,报错cannot load module xxxx,然后项目目录不显示代码 查看左下角log:cannot load module xxx,xxx.iml does not exist,iml文件不存在...

django集成ansibe实现自动化

动态生成主机列表和相关参数 def create_admin_domain(admin_node): workpath = BASE_DIR + '/tools/ansible/script' hosts_file = BASE_DIR + '/tools/ansible/host/' + createhostfile() yml...

【Xshell】SFTP子系统申请已拒绝,请确保SSH连接的SFTP子系统设置有效

【问题已解决】 解决办法: # echo 'Subsystem sftp /usr/libexec/openssh/sftp-server' > /etc/ssh/sshd_config && service sshd restart 或者 原文件如果没有这行,就添加如下这行,在重启。文件要是没有的话,重新创建添加即可。 Subsy...

Ubuntu简单搭建git私有服务

gitserver搭建过程 搭建gitserver过程记录 例如以下: 环境: serverUbuntu虚拟机(Boss),能通过网络訪问到(server地址:192.168.9.103)。 clientWin7电脑一台(work) 软件需求: client软件msysgit:http://msysgit.github.io/ 软件版本号:Git-1....

win10安装elementary os双系统

elementary os是ubuntu的一个分支,界面有点像苹果,比较漂亮。如图: 从已有的磁盘中划出一块空白分区,将elementary单独安装在这个分区里,这个分区需要比其他分区的剩余空间都要大,因为elementary os只支持自动选分区,而它会选剩余空间最大的那个分区。 安装需要制作U盘启动盘,具体方法见:https://elementary...