文件包含漏洞

本文探讨了在IT技术中,特别是PHP编程中,文件包含漏洞的原理、危害,以及如何结合法律法规如网络安全法、刑法和反间谍法来确保网络安全。同时,文章提供了漏洞检测、绕过方式和防御策略的详细内容。
摘要由CSDN通过智能技术生成

法律声明

参与培训需要遵守国家法律法规,相关知识只做技术研究,请勿用于违法用途,造成任何后果自负与本人无关。
中华人民共和国网络安全法(2017年6月1日起施行)
第二十二条 任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供从事入侵网络、干扰网络正常功能、窃取网络数据等危害网络安全活动的工具和制作方法;不得为他人实施危害网络安全的活动提供技术支持、广告推广、支付结算等帮助。
第三十八条 任何个人和组织不得窃取或者以其他非法方式获取公民个人信息,不得出售或者非法向他人提供公民个人信息。
第六十三条 违反本法规定,给他人造成损害的,依法承担民事责任。
第六十四条 违反本法规定,构成犯罪的,依法追究刑事责任。
中华人民共和国刑法(285.286)
第二百八十五条 违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。
第二百八十六条 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。
中华人民共和国刑法修正案7(第九条)
在刑法第二百八十五条中增加两款作为第二款、第三款:“违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。
“提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。
中华人民共和国反间谍法(2023.7月1号起施行)
第四条 本法所称间谍行为,是指下列行为:
(一)间谍组织及其代理人实施或者指使、资助他人实施,或者境内外机构、组织、个人与其相勾结实施的危害中华人民共和国国家安全的活动;
(二)参加间谍组织或者接受间谍组织及其代理人的任务,或者投靠间谍组织及其代理人;
(三)间谍组织及其代理人以外的其他境外机构、组织、个人实施或者指使、资助他人实施,或者境内机构、组织、个人与其相勾结实施的窃取、刺探、收买、非法提供国家秘密、情报以及其他关系国家安全和利益的文件、数据、资料、物品,或者策动、引诱、胁迫、收买国家工作人员叛变的活动;
四)间谍组织及其代理人实施或者指使、资助他人实施,或者境内外机构、组织、个人与其相勾结实施针对国家机关、涉密单位或者关键信息基础设施等的网络攻击、侵入、干扰、控制、破坏等活动;
第三十六条 国家安全机关发现涉及间谍行为的网络信息内容或者网络攻击等风险,应当依照《中华人民共和国网络安全法》规定的职责分工,及时通报有关部门,由其依法处置或者责令电信业务经营者、互联网服务提供者及时采取修复漏洞、加固网络防护、停止传输、消除程序和内容、暂停相关服务、下架相关应用、关闭相关网站等措施,保存相关记录。情况紧急,不立即采取措施将对国家安全造成严重危害的,由国家安全机关责令有关单位修复漏洞、停止相关传输、暂停相关服务,并通报有关部门。

漏洞简介

  • 文件包含漏洞就是使用函数去包含任意文件的时候,当包含的文件来源过滤不严谨的时候,当存在包含恶意文件后,就可以通过这个恶意的文件来达到相应的目的。

漏洞原理

  • 由于在代码开发的过程中,有时候会遇到相同的代码,不想重复输入,就将代码单独写在一个文件里面,当遇到的时候就直接调用该文件进行运行,而这种方式就会导致客户端可以调用其他的恶意文件,通过恶意文件造成文件包含漏洞。
  • 前提是当文件包含的代码文件被当作一个变量来使用,并且能够被用户传入参数,如果没有对该变量做相应的安全防护,就可能会引发出文件包含漏洞。
  • 通俗的说就好像一个应用程序会根据用户提供的文件名动态地加载文件,但是如果用户可以控制文件名,那么就有可能通过输入恶意文件名来执行恶意代码。

示例: $filename(可控变量)include(漏洞函数)

<?php
    $filename  = $_GET['file'];
    include($filename);
?>
  • 代码分析:把一个 GET 请求的参数 file 传给了一个变量filename,然后包含了这个变量。但是开发者没有对 G E T [ ′ f i l e ′ ] 参数经过严格的过滤,直接带入了 i n c l u d e 的函数,这就造成了文件包含漏洞,如此一来,攻击者便可以修改 _GET['file'] 参数经过严格的过滤,直接带入了 include 的函数,这就造成了文件包含漏洞,如此一来,攻击者便可以修改 GET[file]参数经过严格的过滤,直接带入了include的函数,这就造成了文件包含漏洞,如此一来,攻击者便可以修改_GET[‘file’]的值,包含网站的敏感文件进行查看。

文件包含函数

  1. 在 PHP 中共有四种文件包含函数:
    1. Require():只要程序一运行就会执行该包含文件函数,当包含文件发生错误时,程序直接终止执行。
    2. Include_once():和 include()类似,不同之处在于 include_once 会检查这个文件是否已经被导入,如果已导入、下文便不会再导入。
    3. Require_once():和 require()类似,不同处在于 require_once 也是与include_once 一样只导入一次。
    4. include():用于包含指定文件的内容,并将其作为PHP代码执行。

漏洞危害

  1. 配合文件上传漏洞GetShell。
  2. 可以执行任意脚本代码 。
  3. 网站源码文件以及配置文件泄露 。
  4. 远程包含GetShell 。
  5. 控制整个网站甚至是服务器。

常见敏感信息路径

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 配置文件

漏洞检测思路

  • 通过代码审计,来查出漏洞所在位置和原理。
  • 通过漏洞扫描工具识别。
  • 查看网站的程序平台,中间件,框架等,寻找公开漏洞。
  • 通过查看网站的 url 地址,观察链接上参数值。

绕过方式

本地文件包含绕过
  1. %00截断绕过
  2. 路劲长度截断
  3. 点号截断
  4. 双写绕过
  5. 大小写混合绕过
  6. 伪协议绕过
远程文件包含绕过
  1. 问号绕过
  2. #号绕过
  3. %00截断绕过
  4. 其他绕过方式

708cf0cc2635ff9f442e4c37b6687935.png

漏洞分类

本地文件包含与远程文件包含漏洞区别
  1. 本地文件包含主要是包含服务器上的文件。
  2. 远程文件包含主要是通过http协议包含其他地方的资源。
  3. 远程文件包含比本地文件包含的危害大。
本地文件包含(LFI)
简介
  • 仅能够对服务器本地的文件进行包含,由于服务器上的文件并不是攻击者所能够控制的,因此该情况下,攻击者更多的会包含一些固定的系统配置文件,从而读取系统敏感信息。很多时候本地文件包含漏洞会结合一些特殊的文件上传漏洞,从而形成更大的威力。
实验分析

image.png

  • 隐藏文件读取,利用爆破方式获取是否存在废弃或隐藏文件。

image.png

  • 替换参数读取系统文件 …/…/…/…/etc/passwd

image.png

远程文件包含(RFI)
简介
  • 能够通过url地址对远程的文件进行包含,这意味着攻击者可以传入任意的代码。因此,在 web 应用系统的功能设计上尽量不要让前端用户直接传变量给包含函数,如果非要这么做,一定要做严格的白名单策略进行过滤。
实验分析
  • 保证 php.ini 中 allow_url_fopen 和 allow_url_include 为On

image.png
image.pngimage.png
image.png

  • 在自己的服务器上搭建一个站点,把站点地址输入到 url 中进行测试。
    尝试写入一句话木马,格式为txt文本。(写入 txt 格式文件,是因为include()函数会将任何格式的文件都以 PHP 格式进行解析)
<?php @eval($_POST["test"]);?>

image.png
image.png
image.png
image.png

漏洞防御

检查配置文件
  • 检查 php 中的 php.ini ,其中 allow_url_foprn、allow_url_include 这两个选项与 php 伪协议紧密关联。allow_url_fopen默认是开启的,allow_url_include 默认是关闭,最好根据网站需求,对这两个选项进行合理配置。
过滤特殊符号
  • 服务器可以过滤掉执行文件包含操作的符号,例如:\,// 等,以及 php 伪协议常用字符,例如input,output,filter 等,将这些字符进行有效过滤,可以减少恶意文件操作的可能。
指定包含的文件
  • 建立一个白名单。当用户创建文件时,将该文件名插入到记录中,以便其请求文件时,站点可以在执行任何包含之前验证文件名。
  • 16
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值