文件包含漏洞:一场网络安全的谍影重重?

admin 2025年5月26日09:25:08评论4 views字数 2841阅读9分28秒阅读模式

一、文件包含漏洞:不止是“偷梁换柱”那么简单

说起网络安全漏洞,文件包含绝对算得上一个“老油条”。但你以为它只是简单地把恶意代码塞进服务器?Too naive!这玩意儿,本质上就是一场精心策划的“谍战”,黑客通过控制输入,让服务器乖乖执行ta的“秘密指令”。

就像PHP里常用的include()require(),本意是为了代码复用,结果一不小心就成了黑客的“后门”。区别?require()找不到文件直接撂挑子不干,include()则会睁一只眼闭一只眼,继续执行。但无论哪个,都可能引狼入室。

举个栗子:

<?php     include $_GET['test']; ?> 

这段代码看似人畜无害,实际上却暗藏杀机。黑客只需在URL里动点手脚,就能让服务器执行任意PHP文件。

更骚的是:

就算你把PHP文件改成.txt.jpg,照样防不住!include()函数可不管你文件类型,只要里面有PHP代码,它就敢解析。所以,那些以为把木马藏在图片里就万事大吉的,醒醒吧!

所以说,文件包含漏洞,是文件上传漏洞的最佳拍档!

二、本地文件包含(LFI):黑客的“顺手牵羊”

LFI,顾名思义,就是能“顺走”服务器本地文件的漏洞。

看这段代码:

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

有了它,黑客就能像逛自家后花园一样,读取服务器上的各种敏感文件。

怎么玩?

  1. 绝对路径:
     直接指明文件位置,简单粗暴。
  2. 相对路径:
     通过./../等符号,在目录间穿梭,技术含量稍高。

黑客最爱“光顾”的地方:

  • Windows:
    • C:oot.ini
      :系统版本信息,知己知彼。
    • C:windowssystem32inetsrvMetaBase.xml
      :IIS配置文件,服务器的“命门”。
    • C:ProgramFilesmysqlmy.ini
      :MySQL配置,数据库密码可能就在里面。
  • Linux/Unix:
    • /etc/password
      /etc/shadow:用户账户信息,直接关系到服务器控制权。
    • /etc/httpd/conf/httpd.conf
      :Apache配置文件,网站的“骨架”。
    • /etc/my.conf
      :MySQL配置文件,同上。

三、LFI的“花式”利用:黑客的工具箱

1. 文件上传 + LFI:双剑合璧,天下无敌?

如果找不到文件上传漏洞?没关系,先上传一个“图片马”,再用LFI来解析它。

步骤:

  1. 上传一个包含恶意代码的图片文件(例如webshell.jpg)。
  2. 利用LFI漏洞,让服务器执行这个图片文件里的PHP代码。

注意: 为了避免“水土不服”,最好先用图片马生成一个.php文件,再连接它。

2. 包含Apache日志:从“蛛丝马迹”中寻找突破口

没有文件上传点?那就利用Apache的日志文件!

前提:

  • 日志文件可读。
  • 知道日志文件存储目录。

原理:

Apache会将用户的请求写入access.log,错误信息写入error.log。我们可以通过构造特殊的请求,将恶意代码写入日志文件,再用LFI来执行它。

例如:

访问http://127.0.0.1/<?php phpinfo();?>,虽然网页会显示403,但恶意代码已经被写入access.log

坑:

  • 日志存储目录可能会被修改。
  • 日志记录的信息可能会被编码。

3. 包含Session文件:控制变量,操纵全局?

先尝试包含Session文件,再根据文件内容寻找可控变量,构造payload插入到文件中,最后包含即可。

条件:

  • 找到Session内的可控变量。
  • Session文件可读写,并且知道存储路径。

Session文件存储路径:

  • /var/lib/php/sess_PHPSESSID
  • /tmp/sess_PHPSESSID

注意:PHPSESSID可以在Cookie字段中找到。

4. 包含临时文件:与时间赛跑的艺术

PHP上传文件时会创建临时文件,在临时文件被删除前,可以利用时间竞争的方式包含该临时文件。

临时文件存储路径:

  • Linux:/tmp
  • Windows:C:windowsemp

难点:

需要知道临时文件名。

解决方案:

  • 暴力猜解(Windows下可行)。
  • 利用phpinfo()页面获取上传文件的存储路径和临时文件名。

四、远程文件包含(RFI):当“引狼入室”变成“远程操控”

如果PHP的配置选项allow_url_includeallow_url_fopen状态为ON,那么include/require函数就可以加载远程文件,这就是RFI。

风险:

黑客可以直接控制服务器执行远程的恶意代码。

绕过:

如果PHP版本小于5.3.4,可以使用%00截断。或者使用?号截断。

五、PHP伪协议:黑客的“障眼法”

PHP内置了很多URL风格的封装协议,可以用于文件系统函数。

1. file://协议:读取本地文件的“万能钥匙”

不受allow_url_fopenallow_url_include的影响,可以直接读取本地文件。

用法:

file://[文件的绝对路径和文件名]

2. php://协议:读取源码、执行代码的“瑞士军刀”

  • php://filter
    :读取源代码并进行base64编码输出。
  • php://input
    :执行php代码。

用法:

  • php://filter/convert.base64-encode/resource=文件路径
  • file=php://input
    (配合POST请求)

3. ZIP://协议:解压即执行?

可以访问压缩包里面的文件,当它与包含函数结合时,zip://流会被当作php文件执行。

用法:

zip://[压缩包绝对路径]#[压缩包内文件](注意#要URL编码成%23

4. data://协议:直接控制输入流

php://input类似,可以让用户来控制输入流,当它与包含函数结合时,用户输入的data://流会被当作php文件执行。

用法:

  • data://text/plain,<?php phpinfo();?>
  • data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
    (base64编码)

六、文件包含漏洞的“防火墙”:安全措施,一个都不能少

  1. 过滤危险字符:
     使用str_replace等方法,过滤掉../http://等危险字符。
  2. 配置open_basedir
     将PHP所能打开的文件限制在指定的目录树中,防止目录遍历。
  3. 升级PHP版本:
     防止%00截断。
  4. 重命名上传的文件:
     防止被恶意读取。
  5. 设置白名单:
     对于动态包含的文件,只读取白名单中的文件。
  6. 最小权限化:
     做好管理员权限划分,做好文件的权限管理,allow_url_includeallow_url_fopen最小权限化。

总而言之,文件包含漏洞就像一个“潘多拉魔盒”,一旦被打开,后果不堪设想。只有时刻保持警惕,采取有效的防御措施,才能避免成为黑客的“猎物”。
 ```

黑客/

原文始发于微信公众号(龙哥网络安全):文件包含漏洞:一场网络安全的“谍影重重”?

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月26日09:25:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   文件包含漏洞:一场网络安全的谍影重重?http://cn-sec.com/archives/4096761.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息