文件包含+文件上传

本文介绍了PHP中的文件上传和文件包含漏洞,包括include、require、include_once和require_once等函数的工作原理。重点讲解了本地文件包含和远程文件包含的利用方式,如通过上传恶意文件并利用文件包含漏洞执行任意代码。同时,提到了防护措施,如设置白名单和关闭不安全的函数。最后,讨论了PHP的伪协议和相关防护策略。
摘要由CSDN通过智能技术生成

1.php文件上传+文件包含漏洞利用过程
##先说一句:php是世界上最好的语言!!
正文:
因为在一般情况下,文件包含漏洞和文件上传是联合在一起使用威力更大,所以在这里一起讲。
文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
include:使用include函数引用外部文件的时候,只有代码执行到include时,调用的外部文件才会被引用并且读取,当引用错误时,系统只会给个警告,而php文件是会继续执行的。

require:在php文件被执行之前,php解析器会用被引用的文件内容替换require语句,然后与require以外其他的句子组成一个新的php文件执行程序。

include_once:使用该函数时,会在导入文件前先检查该文件是否在其他部分被引用过,如果有,则不会重复引用该文件(因为在同一个程序中导入同一个文件,php是不允许相同名称的函数被重复声明的)。

require_once:require_once与require的功能基本相同,不同的是在应用require_once时,在应用require_once时会检查在引用的文件中是不是已经在其他程序中被引用过,如果有,则不会再引用该文件。(使用此函数在同一页面中引用了两个相同的文件,那么输出时,只有第一个文件被执行,第二个文件则不会被执行)。

文件包含(本地文件包含和远程文件包含):
1.本地文件包含:顾名思义就是调用本地的脚本进行文件包含,通过相对路径的方式找到文件并且读取一些敏感信息和数据。
我们可以尝试先往服务器上面放两个文件
include.php

<?php 
 $file = $_GET['file'];
 if($file){
 include $file;
 }
>

include.txt

<?php
phpinfo();
?>

我们可以直接通过相对路径去访问文件:
此时在这里插入图片描述
如果我们这时访问另一个文件aa.jpg(此图片写上一句话马),然后我们先利用dvwa靶场进行上传后,再用文件包含读取或者用蚁剑直接连接一句话马:
在这里插入图片描述在这里插入图片描述

aa.jpg里面被写入了一句话木马,这个时候我们用蚁剑连接,要注意蚁剑不会识别jpg文件,所以我们先获取cookie后再操作.
在这里插入图片描述
然后进入到后台去了,这就是我所理解的本地文件包含配合文件上传了(文件上传这里省略)

2.远程文件包含:就是只能运用url地址是写入脚本来完成文件包含,难度要大一些。
需要php内置函数:allow_url_fopen = on ,allow_url_incude = on
在这里插入图片描述通过远程包含文件读取一些重要的文件。
提到远程文件包含就不得不提一下php伪协议了,因为是php自己定义的协议,所以叫做伪协议,具体可以自己去网上看看:

<?php
file://        访问本地文件系统
http://      访问http(s)网址
ftp://        访问ftp(s)网址
php://      访问各个输入输出流网址
zip://        访问压缩文件
data://     访问数据
ssh2://     source shell 2
expect://  处理交互式的流
glob://     查找匹配的文件路径模式
phar://     php归档文件
ogg://      音频流
?>

防护措施:
建议设置白名单
关闭一些重要的函数

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值