文件包含及代码执行及命令执行


前言

文件包含,代码执行,命令执行常见的函数,以及如何绕过过滤


一、文件包含漏洞

文件包含是什么
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。
服务器执行PHP文件时,可以通过包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件。

1.文件包含漏洞简介

产生漏洞原因

在这里插入图片描述

这是一段PHP代码,从代码上分析可以看出,把一个GET请求的参数“page”传给了一个变量filename,然后包含了这个变量。然而,开发者没有对 G E T [ ‘ p a g e ’ ] 参 数 经 过 严 格 的 过 滤 , 直 接 带 入 了 i n c l u d e 的 函 数 , 我 们 可 以 修 改 _GET[‘page’]参数经过严格的过滤,直接带入了include的函数,我们可以修改 GET[page]include_GET[‘page’]的值,包含自己想看的文件。(文件的路径一定要对,不对的话就包含不了)

文件包含漏洞就是: 程序开发人员一般希望代码更灵活,所以将被包含的文件设置为变量,用来进行动态调用,文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。从而导致客户端可以调用一个恶意文件,造成文件包含漏洞。

1.文件包含重点四个函数

require()
require_once()
include()
include_once()

include():执行到include时才包含文件,找不到被包含文件时只会产生警告,
脚本将继续执行 ;
require():只要程序一运行就包含文件,找不到被包含的文件时会产生致命
错误,并停止脚本;
include_once()和require_once():若文件中代码已被包含则不会再次包含

2.漏洞利用的条件

1.程序用include()等文件包含函数通过动态变量的范式引入需要包含的文件
2.用户能够控制该动态变量
3.要保证php.ini中allow_url_fopen和allow_url_include要为On

注意:
1.PHP中只要文件内容符合PHP语法规范,包含时不管扩展名是什么都会被PHP解析,

2.若文件内容不符合PHP语法规范则会暴漏其源码。

3.php.ini配置文件:allow_url_fopen=off 只有开启了才可以包含文件。

4.php4存在远程&本地,php5仅存在本地包含。

3.漏洞分类

本地包含:
可以包含本地文件,在条件允许时甚至能执行代码
读敏感文件,读PHP文件
包含日志文件GetShell
包含data:或php://input等伪协议
若有phpinfo则可以包含临时文件
配合上传图片马,然后包含从而GetShell

远程包含:
包含远程的木马或病毒文件,从而GetShell
注意:要实现远程文件包含需要allow_url_fopen和allow_url_include都开启

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 配置信息 
 c:\windows\my.ini

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 
/etc/my.conf // mysql 配置文件

2.本地包含敏感文件

1.本地包含文件过程:

在一个网站中,
存在着这么几个文件:index.php 、LFI.php 、phpinfo.php
其中,index.php存在着包含的功能,现在想用index.php包含LFI.php文件和phpinfo.php文件

在这里插入图片描述
1.首先让page=LFI.php文件
2.page的值传给变量filename
3.include包含这个变量
4.网页便包含了这个文件
phpinfo.php这个文件也这么包含进来

2.文件包含简单例子

拿windows系统中的boot.ini文件为例进行包含,因为boot.ini在C盘的根目录下,我们要包含这个文件的话首先要进入到这个目录下才能包含它。
这里便遇到了相对路径和绝对路径的概念

绝对路径:是指目录下的绝对位置,直接到达目标位置,需要输入完整的文件路径。
相对路径:是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系。
相对路径需要用到“…/”来访问上一级路径

假设index.php在C:\www目录中
则包含boot.ini路径为

/index.php?page=../../boot.ini

3.文件包含简单绕过限制

有一些对文件包含做出了过滤限制,比如代码为

include$filename . ".html")  ///在包含变量$filename时,限制了只允许包含“.html”
格式的文件,这就阻止了一些非法的包含其他文件的情况
</
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值