当前位置: 首页 > article >正文

[Web安全 网络安全]-文件读取与下载漏洞

文章目录:

一:任意文件读取漏洞 

1.定义

2.危害

3.产生原因

4.发现漏洞 

5.利用漏洞

6.防范措施

7.读取漏洞举例

二:任意文件下载漏洞

1.定义

2.漏洞利用

3.漏洞挖掘

4.漏洞验证

5.漏洞防御修复


 pikachu靶场:是一个网络安全训练平台,旨在模拟真实世界中的网络攻击和防御场景,帮助用户提高网络安全技能和知识

一:任意文件读取漏洞 

1.定义

任意文件读取漏洞属于文件操作漏洞的一种,攻击者通过提交特定的输入,可以绕过安全限制,读取服务器上的敏感文件或配置文件

这种漏洞通常发生在文件读取函数(如readfile(), file_get_contents(), fopen()等)的使用过程中
当这些函数的输入路径未经过严格校验或校验不严时,攻击者就可以控制这个变量来读取任意文件

2.危害

任意文件读取漏洞的危害极大,它不仅可以泄露网站的结构目录,还可能导致敏感信息(如用户密码、数据库配置文件、系统配置文件等)的泄露

这些敏感信息一旦被攻击者获取,就可能被用于进一步的攻击,如密码破解、数据篡改、系统控制等

3.产生原因

1.文件读取函数的输入路径用户可控

2.输入路径未经过严格校验或校验不严

3.服务器未对文件访问权限进行严格控制

4.发现漏洞 

一般可以通过构造特殊的URL请求来尝试触发文件读取漏洞


例如,在URL中添加特殊的路径参数(如../或~/),并观察服务器是否返回了非预期的文件内容

5.利用漏洞

1.读取系统配置文件(如/etc/passwd, /etc/shadow等),获取系统用户信息

2.读取数据库配置文件(如数据库连接字符串),尝试直接连接数据库

3.读取网站源代码或配置文件,寻找其他安全漏洞

4.读取日志文件,获取网站访问记录或用户操作记录

6.防范措施

1.对所有输入进行严格的校验和过滤,确保输入路径符合预期

2.使用白名单机制来限制可访问的文件类型和路径

3.对敏感文件和目录设置严格的访问权限,对所有文件路径输入进行严格的验证和清理

4.使用参数化查询或安全的文件操作函数来避免直接拼接用户输入

5.定期对网站进行安全审计和漏洞扫描,及时发现并修复安全漏洞

6.始终将上传的文件存储在Web根目录之外的安全目录中,禁用或严格限制文件上传功能,如果它们不是必需的

7.确保服务器配置正确,以防止符号链接和其他潜在的文件系统攻击

8.记录和监控所有文件上传和下载尝试,以便在发生安全事件时进行检测和响应
  记录和监控所有文件访问尝试,以便在发生安全事件时进行检测和响应

9.考虑使用Web应用防火墙(WAF)来增强安全性

10.始终使用最新版本的PHP和服务器软件,并应用所有安全补丁

7.读取漏洞举例

 假设有一个Web应用程序,它提供了一个文件下载功能,允许用户通过URL参数指定要下载的文件名

<?php  
$filename = $_GET['file']; // 从URL参数中获取文件名  
  
// 假设有某种简单的安全检查,但不够严格  
if (strpos($filename, '..') === false) {  
    // 如果文件名中不包含"..",则认为是安全的  
    if (file_exists('/path/to/files/' . $filename)) {  
        // 文件存在,则读取并发送给用户  
        readfile('/path/to/files/' . $filename);  
    } else {  
        echo "文件不存在";  
    }  
} else {  
    echo "非法请求";  
}  
?>

代码审计、漏洞分析

在这个例子中,虽然有一个简单的安全检查来防止路径遍历(即检查文件名中是否包含"..")
    http://example.com/download.php?file=../../../etc/passwd



但这种检查是不充分的,攻击者可以利用:编码、URL编码/百分比编码、符号链接或其他技巧来绕过这种检查
    URL编码/百分比编码
        http://example.com/download.php?file=%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd

    Unicode编码:假设服务器错误地将Unicode字符U+202E(右至左标记)与文件名处理结合,导致路径解析被逆转
        http://example.com/download.php?file=a.txt%E2%80%AE..%E2%80%AE..%E2%80%AEetc%E2%80%AEpasswd

    路径截断
        http://example.com/download.php?file=a.txt%00../etc/passwd

二:任意文件下载漏洞

1.定义

任意文件下载 实现过程是:根据参数filename的值,获得该文件在网站上的绝对路径,读取文件内容,发生给客户端进行下载


任意文件下载漏洞:网站由于业务需求,往往需要提供文件查看或文件下载功能,但若对用户查看或下载的文件类型、目录不做限制
                 则恶意用户就能够查看或下载服务器上任意敏感文件,这就是文件查看与下载漏洞

     
    本来是指定目录下的下载展示文件,但是我们可以下载目录下页面没有展示的文件     ?filename=downloadfile.png

    目录穿越漏洞:下载任意目录下的文件                                        ?filename=../../downloadfile.txt

2.漏洞利用

漏洞利用
    获取源码(黑盒——>百盒);获得站点与中间件配置文件; 获得应用与系统配置文件(ssh、mysql)


    针对web应用
        php:获取inc/config.php获得数据库连接字符串中的口令信息。
        asp:获取inc/conn.asp文件,获得数据库连接字符串,得到数据库口令。若是ACCESs数据库,可以得到数据库路径,在下载数据库内容
        aspX
             获取网站根目录web.config文件,获得数据库连接字符串中的口令信息
             获取bin/*.dll文件,获取网站源码(不完整代码)。使用.NET reflector工具打开编译后的dll文件
        jsp
             获取conf/tomcat-user.xml文件,获得tomcat管理界面的口令信息,上传war包GetShell
             获取wEB-INF/Web.xml文件,获得数据库连接字符串中的口令信息


    针对操作系统
        Windows
            C:\boot.ini                               //查看系统版本
            C:\WindowslSystem32\inetsrvMetaBase.xml   //llS配置文件
            C:\Windows\repairsam                      //存储系统初次安装的密码
            C:\Program Filesimysqlmy.ini              //Mysql配置
            C:Program Filesimysqlldatalmysqlluser.MYD //Mysql root
            C:\Windowsiphp.ini                        //php配置信息
            C:lWindowsimy.ini                         //Mysql配置信息
            C:lWindowslwin.ini                        //Windows系统的一个基本系统配置文件

        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                                //mysql配置文件
            /ctc/httpd/conf/httpd.conf                 //apachc配置文件
            /root/.bash_history                        //用户历史命令记录文件
            /root/.mysql_history                       //mysql历史命令记录文件

3.漏洞挖掘

漏洞挖掘
    1.Google Hacker利用
        inurl:"readfile.php?file="                    //搜索含有关键字的url地址  allinurl
        intitle:关键字                                 //把网页标题中某个关键字作为搜索条件   allintitle完全匹配
        intext:关键字                                  //把网页正文中某个关键字作为搜索条件 allintext完全匹配
        关键字 site:网址                                //返回域名中所有的url地址
        filetype:拓展名(不可单独使用)                  //搜索特点格式的文件
            .pwI		口令文件
            .tmp		临时文件
            .cfg		配置文件
            .ini		系统文件
            .hlp		帮助文件
            .dat		数据文件
            .log		日志文件
            .par		交互文件
            .pdf\.doc\.docx	文档文件
            .xls\.xlsx\.csv	表格文件
            .ppt\.pptx		幻灯片文件
            .zip\.rar\.7z\.iso	压缩文件	
        cache:网站                                      //搜索一个网站的缓存运行
        info:关键字                                     //搜索指定站点的一些基本信息
        define			                                //搜索关键字的定义
        link			                                //查找与关键字做了链接的 URL 地址
        related:URL		                                //搜索与指定 URL 相关的页面
        stocks			                                //搜索有关一家公司的股票市场信息
        insubject			                            //搜索 Google 组的标题行
        msgid			                                //搜索识别新闻组帖子的Google 组信息标识符和字符串
        group			                                //搜索 Google 组搜索词汇帖子的题目
        author			                                //搜索新闻组帖子的作者
        bphonebook		                                //仅搜索商业电话号码簿	
        rphonebook		                                //仅搜索住宅电话号码簿
        phonebook		                                //搜索商业或者住宅电话号码簿
        daterange		                                //搜索某个日期范围内Google做索引的网页
        inanchor			                            //搜索一个 HTML 标记中的一个链接的文本表现形式

        运算符
            空格            逻辑与操作
            -               逻辑非操作,如 A-C表示搜索有A但没C的网页
            OR |            逻辑或,如A OR B表示搜索含有A的网页B的网页和同时含A和B的网页
            '''             精确搜索用双引号
        通配符
            *               代替任意字符串
            ?               代替任意字符
            ~               代替同义词
            ..              数字范围 1..4==1,2,3,4
        其他事项
            Google 对英文关键字的大小写不敏感
            Google对出现频率极高的英文单词做忽略处理。如.com i www http等
                 如果要对忽略的关键字进行强制搜索,则需要在该关键字前加上明文的”+”号
            Google大部分常用英文符号(如问号,句号,逗号等)无法成为搜索关键字,加强制也不行


    2.从链接上看
        download.php?path=
        download.php?file=
        down.php?file=
        data.php?filc=
        readfile.php?file
        read.php?filename


    3.从参数上看
        &realPath=
        &filePath=
        &filepath=
        &filepath=
        &path=
        &path=
        &inputFile=
        &Inputfile=
        &urls=
        &url=

4.漏洞验证

漏洞验证
    index.php?f=../../../../../../etc/passwd

    index.php?f=../../../../windows/win.ini

    index.php?f=../index.php

5.漏洞防御修复

漏洞防御修复
    1.正则表达式严格判断用户输入参数的格式

    2.下载路径不可控,而是程序自动生成后保存在数据库中,根据ID进行下载

    3.过滤.:对参数做严格的过滤,不能进行目录遍历(穿越)

    4.php.ini配置open basedir限定文件访问范围

http://www.kler.cn/news/307368.html

相关文章:

  • Vue、React 生命周期有哪些?页面数据获取放在哪个生命周期做比较好?
  • JAVA语言之Solr的工作原理以及如何管理索引库
  • 【爬虫软件】批量采集抖音主页已发布作品
  • 从零开始学习Linux(12)---进程间通信(信号量与信号)
  • 即插即用!高德西交的PriorDrive:统一的矢量先验地图编码,辅助无图自动驾驶
  • PHP环境搭建详细教程
  • 基于kolla-ansible在openEuler 22.03 SP4上部署OpenStack-2023.2
  • 二叉树和堆概念
  • C++ 科目二 智能指针 [weak_ptr] (解决shared_ptr的循环引用问题)
  • websocket消息推送修改
  • PostgreSQL的查看主从同步状态
  • 凸优化学习(3)——对偶方法、KKT条件、ADMM
  • 「C++系列」文件和流
  • 医学数据分析实训 项目四回归分析--预测帕金森病病情的严重程度
  • Java设计模式—面向对象设计原则(二) --------> 里氏代换原则 LSP (完整详解,附有代码+案列)
  • Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘
  • sqlgun靶场攻略
  • Mysql系列-索引简介
  • Vert.x HttpClient调用后端服务时使用Idle Timeout和KeepAlive Timeout的行为分析
  • 11.java面向对象
  • macOS上谷歌浏览器的十大隐藏功能
  • c语言中的常量定义(补充)
  • 【兼容性记录】video标签在 IOS 和 安卓中的问题
  • 队列-------
  • 英语学习交流平台|基于java的英语学习交流平台系统小程序(源码+数据库+文档)
  • EP12 分类列表元素点击跳转
  • 【云原生监控】Prometheus之PushGateway
  • 机器学习的入门指南
  • JVM HotSpot 虚拟机: 对象的创建, 内存布局和访问定位
  • Oracle数据库中的归档日志(Archive Log)详解与应用