文件包含(总结or大纲)

文件包含(总结or大纲)

导致原因

include(),include_once(),require(),require_once(),fopen(),readfile()

使用前4个函数包含新的文件时,只要文件内容包含符合php语法规范,任意扩展名都可以被php解析,当包含非php语法规范时,将会暴露其源代码。后两个函数会造成敏感文件读取。

如何利用:

  1. include()等函数通过动态变量的方式引入需要包含的文件。
  2. 攻击者可以控制该动态变量。

总的来说,就是有可以传入include()等函数的可控变量。

本地文件包含

ex:

<?php
$file=$_GET['file'];
if(file_exists('/home/wwwrun'.$file.'cat'));
include '/home/wwwerun'.$file.'.cat';
?>
  1. 在以上代码中,假设构造http://123123/?file=…/…/flag,经过上面的代码后则变为,include ‘/home/wwwrun/…/…/flag.cat’,flag.cat这个文件是不存在的,所以无法读取,但如果构造成?file=…/…/flag%00,则可以读取。

原理:php内核由c语言实现,所以使用了c语言的一些字符串处理函数。在c语言中,0字节为字符串结束符,所以在后面加入0字节可以截断flag后面的字符串,代码变成’/home/wwwrun/…/…/flag\0cat’,由于\0时字符串已经结束,则include()函数不读取cat。

  1. 而因为url不支持\,所以通过urlencode编码,变成%00。

同时,由代码看出路径会跳到/home/wwwrun下,可以使用…/…/跳出目录

原理:在文件系统中,../ 是用于表示上级目录的相对路径符号。当在文件路径中使用 ../ 时,实际上是在告诉系统向上跳转到上一级目录。因此,连续使用 ../ 就可以一级一级地向上跳转,直到达到所需的目录位置。

远程文件包含漏洞

如果php配置选项allow_url_include为ON,则include与require函数都可以加载远程漏洞,这种漏洞被称为远程文件包含漏洞

ex:

<?php
$param=$_GET['param'];
require_once $param.'/cat';

同样如果构造http://123123/?param=http://123456/flag,txt,经过代码会变为

require_once http://123456/flag.txt/cat

相同这也可以使用%00来截断。

远程和本地的区别

本地文件包含漏洞是加载服务器本地的文件,远程文件包含是加载一个远程的资源,比如使用http协议加载远程文件。

思路:

  1. 伪协议
  2. 日志文件包含,改UA头
  3. senssion文件包含,更改senssion,利用sension写入执行文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

follycat

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值