PHP文件包含2

文件包含

include "/var/www/html/flag.php"

一、文件名可控

题干如下所示

$file=$_GET['file'];
include $file.".php";`

//采用php伪协议,可以使用data协议

二、文件后缀可控

$file=$_GET['file'];
include "/var/www/html/".$file;

//前面路径被锁死,不能使用伪协议

/var/www/html/../../../../flag

用来回到根目录

三、高级文件包含

(一). ngnix日志文件包含

ngnix可以认为是http的一个服务器软件,提供了http服务,默认监听80端口

http://localhost/123.php?a=b

123.php 后缀是否是.php .就进行一次转发,转发到本地的127.0.0.19000端口

9000端口是被另一个服务端软件监听,它提供解析php文件的服务,我们把这个软件叫做php.fpm

专门解析php后缀的文件,执行里面代码,将执行结果交给nginx,再由nginx返回http客户端,这个客户端就是浏览器

http://localhost/123.jpg

123.jpg 非php后缀,那么由自己来处理,nginx会找到web目录,读取123.jpg的内容,并返回给浏览器,告诉其我返回的文件内容是一个jpg图片,你按照图片模式进行渲染,于是,浏览器页面上就能显示出一张图片出来

日志中User-Agent是一个注入点,很多一句话木马可以植入
例题web37

日志包含前提条件

  1. 有文件后缀可控的文件包含点
  2. 有可以访问到的日志路径 默认nginx的日志路径为 /var/log/nginx/access.log

(二). 临时文件包含

/tmp/php??????

文件包含,能否包含一个/???/????????[@-[]
不行,文件包含是不支持通配符的
我们需要明确的,得到这个临时目录下php开头的随机文件名字全称,然后我么你就可以正常包含进去
默认情况,生命周期与php脚本一致,也就是说,脚本运行过程中,存在,脚本运行结束了;这个文件也会自动删除

突破点

  • 在php脚本运行过程中,包含临时文件
  • 在脚本运行过程中,得到完整的临时文件名称

php配置文件中,默认,每次向浏览器发送内容时,不是一个字符一个字符发送的,它是一块一块内容发送的4096个字符
例题web38
假设我们能够访问phpinfo的结果 FILES就是存在tmp_name临时文件名字,读取后可以成功包含
phpinfo_lfi形式

(三). php的session文件包含, upload_progress文件包含

session跨页面保存内容

例题web39

强制文件上传时,通过上传一个固定的表单PHP_SESSION_UPLOAD_PROGRESS,可以往服务器的session文件内写入我们的指定内容

然后在脚本运行过程中
包含后,可以执行里面的php代码

(四)pear文件包含

条件

  1. 有文件的包含点
  2. 开启了pear扩展
  3. 配置文件中register_argc_argv设置为ON,而默认为OFF

pear扩展

PHP Extension and Application Repository

默认安装位置是 /usr/local/lib/php/

利用Pear扩展进行文件包含

  • 方法一 远程文件下载例题web40
  • 方法二 生成配置文件,配置项传入我们恶意的php代码形式

a=b
username=root
man_dir=<?php eval($_POST[1]);?>

  • 方法三 写配置文件方式

    GET /?file=/usr/local/lib/php/pearcmd.php&aaaa+config-create+/var/www/html/<?=$_POST[1];?>+1.php

(五). 远程文件包含

本文链接:

https://youngking.xyz/index.php/archives/672/