PHP文件包含漏洞复现

引言~

老规矩,介绍一波原理先

PHP文件包含原理:
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
php 中引发文件包含漏洞的通常是以下四个函数:
1、include() 当使用该函数包含文件时,只有代码执行到 include() 函数时才将文件包含进来,发生错误时只给出一个警告,继续向下执行。
2、include_once() 功能和 include() 相同,区别在于当重复调用同一文件时,程序只调用一次。
3、require() 只要程序一执行就会立即调用文件,发生错误的时候会输出错误信息,并且终止脚本的运行
4、require_once() 它的功能与 require() 相同,区别在于当重复调用同一文件时,程序只调用一次。
当使用这四个函数包含一个新文件时,该文件将作为 PHP 代码执行,php 内核并不在意该被包含的文件是什么类型。所以如果被包含的是 txt 文件、图片文件、远程 url、也都将作为 PHP 代码执行

再谈谈文件包含的分类

文件包含漏洞可以分为 RFI (远程文件包含)和 LFI(本地文件包含漏洞)两种。而区分他们最简单的方法就是 php.ini 中是否开启了allow_url_include。如果开启 了我们就有可能包含远程文件。
1、本地文件包含 LFI(Local File Include)
2、远程文件包含 RFI(Remote File Include)(需要 php.ini 中 allow_url_include=on、allow_url_fopen = On)
在 php.ini 中,allow_url_fopen 默认一直是 On,而 allow_url_include 从 php5.2 之后就默认为 Off。

因为要测试的服务器并没有文件包含漏洞代码,而这个漏洞是必须服务器端自带的,也就是说如果你要攻击的网站没有文件包含漏洞,图片马就是用不了的,所以为了方便我们实验的进行,我们需要先上传一个带有文件解析漏洞代码的PHP文件到服务器上
需要用到的php函数为include()

include()函数对文件后缀名无要求,而对其中的语法有要求,即使后缀名为txt,jpg也会被当做php文件解析,只要文件内是<?php ?>形式就可以执行,但是如果不是php语法的形式,即使后缀为php,也无法执行。






一.开始验证

1.先把我们的文件包含漏洞代码上传到服务器的根目录里,要记住上传的位置,因为到时候还要调用这个还是来解析小马!!

本地文件包含exp:
<?php
$file = $_GET['file'];
include $file;
?>

具体利用方法:

浏览器输入刚刚上传php文件解析漏洞代码的地址 并且在url地址后面加上file=upload/1.jpg来调用小马
比如:127.0.0.1/upload-labs-master/upload//include.php?file=upload/1.jpg
当然,PHP文件包含不可能只有包含图片马这一种攻击手法,利用文件包含漏洞的攻击方法五花八门,如果当你有一天渗透测试发现图片马用不了了,不妨试试以下几种思路:
1.包含日志,但是需要知道服务器日志的存储路径,且日志文件可读
2.远程文件包含,如curl

先把我们要上传的php文件包含代码改为jpg格式,不然过不了检测,当然,改后缀名只是其中的一种方法,也可用采用禁用浏览器js来屏蔽后缀名的检测,从而达到文件上传的效果

在这里插入图片描述


2.抓包改包

打开burp设置浏览器代理,准备抓取浏览器与服务端通讯的数据包

推荐使用火狐的 foxy proxy 插件
在这里插入图片描述
抓取数据包后,我们来修改数据包里面的内容,把刚刚上传的jpg文件改为用来的php后缀名

在这里插入图片描述
接下来验证一下文件是否上传成功,浏览器复制刚刚上传的图片链接,然后新建窗口打开
在这里插入图片描述

文件能成功打开,虽然报错了,不过证明我们成功上传了文件解析漏洞的php代码,其实出现报错信息的是一件有趣的事情,因为它直接把服务器的物理路径给报出来了,省的我们花无谓的时间再去探测服务器的目录,这对我们往后的文件上传很有帮助!!




3.制作图片马

1.准备好一张图片,个人觉得小一点的图片比较好,因为有些网站会做限制,不让传输过大的文件,而且上传的图片太大了,容易引起网站管理员的注意,所以准备的图片大小适中就好,这里做演示所以选了一张小一点的图片

2.准备好一句话代码,这是我们远程控制对方服务器的关键!!

PHP一句话代码:

3.合并两个文件,我这里准备的是bat处理文件,这样子比较高效

先把这串代码复制到记事本里,然后把后缀名改为bat即可

copy *.jpg /b + *.php /a 1.jpg

要记住的一点,图片要放在前面,木马放后面 不然会图片无法显示!!

制作成功的图片马是能够成功显示的,如果无法显示,建议重新找一张图片合并,不然一张无法显示的图片在一个网站里面太过显眼,会引起怀疑
在这里插入图片描述
右击图片马,使用文本编辑器打开,可以发现我们的一句话木马位于文件的最后面

在这里插入图片描述

准备完毕图片马,接下来我们可以上传了

4.上传图片马

可以看到,上传成功得图片马是能够正常显示的

在这里插入图片描述

接着,我们就要利用刚刚上传的PHP文件解析漏洞代码来执行图片马的功能了

浏览器打开我们上传的图片马
在这里插入图片描述

可以看到图片是非常正常的,完全看不出有木马。

接着,我们就要利用刚刚上传的PHP文件解析漏洞代码来执行图片马的功能了

5.漏洞利用

浏览器输入刚刚上传php文件解析漏洞代码的地址 并且在url地址后面加上file=upload/1.jpg来调用小马

127.0.0.1/upload-labs-master/upload//include.php?file=upload/1.jpg

可以看到页面出现了一堆乱码,而且刚刚我图片马加在这个位置,可是现在缺没有被打印出来,而是跟图片一起被执行了
在这里插入图片描述

6.蚁剑链接getshell

打开蚁剑,右键添加数据,把刚刚的url地址复制过去,然后输入链接的密码
在这里插入图片描述

双击打开,成功拿到网站的webshell
在这里插入图片描述

至此,PHP文件包含漏洞验证完毕




这里说说漏洞的解决方案吧

做到以下几点虽说不是能完全杜绝漏洞的复现,但是抵挡普通的php文件包含漏洞攻击却也是可以的


1.严格检查变量是否已经初始化。
2.严格判断包含中的参数是否外部可控。
3.基于白名单的包含文件验证,验证被包含的文件是否在白名单中。
4.尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include(“func.php”)。
5.对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现…/之类的目录跳转符。
6.可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文件包含。


最后送上一波PHP伪协议:
file:///var/www/html 访问本地文件系统  (常用)
ftp://<login>:<password>@<ftpserveraddress> 访问 FTP(s) URLs
data:// 数据流
http:// — 访问 HTTP(s) URLs   (常用)
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流
zlib:// — 压缩流
data:// — Data (RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP Archive
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — Audio streams
expect:// — 处理交互式的流
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 请注意,.htaccess文件本身并不会造成上传漏洞,它是一种用于配置Apache服务器的文件。我猜测您的问题是如何利用配置错误或者漏洞上传.htaccess文件来实现服务器攻击的。 一些常见的.htaccess文件上传漏洞如下: 1. 目录遍历漏洞: 如果一个服务器上的网站没有正确限制文件上传的目录,攻击者可以上传包含攻击代码的.htaccess文件到网站的某个目录,然后通过访问该目录下的文件来执行攻击代码。 2. 文件名绕过漏洞: 有些服务器在处理上传的文件名时可能会忽略.htaccess后缀,因此攻击者可以上传包含攻击代码的.htaccess文件并将其命名为其他文件类型的后缀名,例如.php、.jpg、.gif等,然后通过访问该文件来执行攻击代码。 3. MIME类型绕过漏洞: 攻击者可以上传一个包含攻击代码的.htaccess文件,并在其中设置MIME类型为可执行文件,这样当服务器处理该文件时就会将其作为可执行文件来执行其中的代码。 请注意,这些漏洞都是由于服务器配置错误或者漏洞造成的,因此最好的解决方法是及时更新服务器软件并开启安全防护措施,例如限制上传文件的类型、大小、目录等。同时,还应该定期检查服务器配置和日志来发现潜在的安全问题。 ### 回答2: .htaccess文件上传漏洞是一种常见的Web漏洞之一,攻击者可以通过该漏洞上传恶意的.htaccess文件来对受影响的网站进行进一步的攻击。 首先,攻击者需要找到使用了.htaccess文件的目标网站,因为只有使用了.htaccess文件的网站才会存在这个漏洞。然后,攻击者需要找到可以上传文件的功能或接口,这可能是一个后台管理系统、论坛或其他用户交互的页面。 接下来,攻击者需要准备一个恶意的.htaccess文件。这个文件可以包含任意的指令,用于控制网站的访问权限、重定向链接、阻止特定的IP地址或用户等。例如,攻击者可以将.htaccess文件设置为重定向用户流量到恶意网站或者隐藏敏感文件等。 然后,攻击者通过上传功能或接口将准备好的.htaccess文件上传到目标网站的服务器上。在上传文件时,攻击者可能会利用一些漏洞或者绕过文件上传过滤的技巧,以确保文件被成功上传。 最后,攻击者需要验证上传的.htaccess文件是否生效。他们可以通过访问目标网站来检查是否按照设定的指令进行了操作。如果.htaccess文件成功生效,那么攻击者将获得对目标网站重要功能的控制,可能会导致进一步的攻击活动。 为了防止.htaccess文件上传漏洞的利用,网站管理员可以采取以下措施: 1. 检查服务器的配置,确保禁止上传.htaccess文件或限制其使用; 2. 对文件上传功能进行严格的输入验证和过滤,过滤掉恶意的文件类型和内容; 3. 及时更新软件和补丁,确保服务器和相关软件的安全; 4. 启用防火墙和入侵检测系统,以便及时发现和阻止任何恶意活动; 5. 加强对服务器和网站的监控和日志记录,及时发现异常行为。 总之,.htaccess文件上传漏洞是一种严重的Web安全威胁,攻击者可以利用该漏洞来控制目标网站。为了保护网站的安全,网站管理员需要及时修复漏洞,并采取适当的预防措施来阻止该漏洞的利用。 ### 回答3: .htaccess文件上传漏洞是一种安全漏洞,它可能允许攻击者将恶意文件上传到服务器上,并在服务器上执行任意代码。 要复现.htaccess文件上传漏洞,可以按照以下步骤进行: 1. 首先,需要找到一个存在.htaccess文件上传漏洞的目标网站。这可以通过向目标网站发送恶意文件上传请求或者查找已知的漏洞报告来实现。 2. 确定目标网站的文件上传功能是否存在安全漏洞。这可以通过上传不同类型的文件来测试是否可以绕过文件类型限制。 3. 如果文件上传功能存在漏洞,则可以使用.htaccess文件进行攻击。创建一个包含恶意代码的.htaccess文件,例如包含PHP代码的.htaccess文件。 4. 通过网站的文件上传功能上传制作好的.htaccess文件。如果上传成功,那么.htaccess文件将被保存在服务器上,并且服务器将执行其中的恶意代码。 5. 最后,攻击者可以利用已经成功上传的.htaccess文件执行各种恶意操作,例如在服务器上创建后门、执行任意命令、获取敏感数据等。 为了防止.htaccess文件上传漏洞,应采取以下预防措施: 1. 对文件上传功能进行严格的输入验证和过滤,确保只能上传安全的文件类型。 2. 对上传的文件进行严格的文件类型检查,避免可以执行恶意代码的文件类型被上传。 3. 设置最小化的文件上传权限,仅允许必要的文件上传操作。 4. 定期更新网站的软件和插件,以保持与最新的安全修补程序同步。 5. 监控网站的日志文件,及时发现异常文件上传行为。 总之,.htaccess文件上传漏洞是一种严重的安全威胁,为了保护网站和用户的安全,应该进行安全验证和限制,以防止攻击者利用该漏洞进行恶意操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值