文件包含简介
服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。
踏上路途吧
本文我会先将一些PHP基础进行阐述,然后再讲解php反序列化漏洞如何应用
面向对象(Object-Oriented,简称 OO)是一种编程思想和方法,它将程序中的数据和操作数据的方法封装在一起,形成”对象”,并通过对象之间的交互和消息传递来完成程序的功能。面向对象编程强调数据的封装、继承、多态和动态绑定等特性,使得程序具有更好的可扩展性、可维护性和可重用性。
在面向对象的程序设计(英语:Object-oriented programming,缩写:OOP)中,对象是一个由信息及对信息进行处理的描述所组成的整体,是对现实世界的抽象。
在现实世界里我们所面对的事情都是对象,如计算机、电视机、自行车等。
1 | <?php |
libxml_disable_entity_loader(false);
这一行将禁用libxml实体加载器。这是为了防止XML实体注入攻击,确保不会加载外部实体。设置为false
表示实体加载器没有被禁用。$xmlfile = file_get_contents('php://input');
这一行从php://input
读取HTTP请求的主体部分(通常是POST请求的数据),并将其存储在变量$xmlfile
中。if(isset($xmlfile)){ ... }
这一行检查变量$xmlfile
是否存在。如果存在,表示成功获取了XML数据。$dom = new DOMDocument();
这一行创建了一个新的DOMDocument对象,用于解析XML。$dom->loadXML($xmlfile, LIBXML_NOENT | LIBXML_DTDLOAD);
这一行使用loadXML
方法加载XML数据到DOMDocument对象中。选项LIBXML_NOENT
和LIBXML_DTDLOAD
用于指定加载XML时的一些行为。LIBXML_NOENT
用于禁用实体扩展,以防止XXE(XML外部实体)攻击,而LIBXML_DTDLOAD
用于允许加载DTD(文档类型定义)。$creds = simplexml_import_dom($dom);
这一行将DOMDocument对象转换为SimpleXMLElement对象,以便更容易地访问XML数据。$ctfshow = $creds->ctfshow;
这一行尝试从XML数据中提取名为”ctfshow”的元素的值,并将其存储在变量$ctfshow
中。XML external entity injection (also known as XXE)。奇怪,XML External Entity 为什么不叫XEE?
XML 外部实体注入(也称为 XXE)是一种 Web 安全漏洞,允许攻击者干扰应用程序对 XML 数据的处理。它通常允许攻击者查看应用程序服务器文件系统上的文件,并与应用程序本身可以访问的任何后端或外部系统进行交互。
在某些情况下,攻击者可以利用 XXE 漏洞联合执行服务器端请求伪造(SSRF) 攻击,从而提高 XXE 攻击等级以破坏底层服务器或其他后端基础设施。
XXE漏洞发生在应用程序解析XML输入时,没有禁止外部实体的加载,导致可加载恶意外部文件和代码,造成任意文件读取、命令执行、内网端口扫描、攻击内网网站、发起Dos攻击等危害。
XXE漏洞触发的点往往是可以上传xml文件的位置,没有对上传的xml文件进行过滤,导致可上传恶意xml文件。
1 | docker pull centos:7 |
1 | docker run -d --name centos7 --privileged=true -p 10022:22 -p 10080:80 -h testhost -v /home/fd/container/centos7:/home/centos7 centos:7 /usr/sbin/init |
参数说明:
1 | -d 后台运行方式 |
2023-04-20 12:221623
Docker Compose 是一个用于管理 Docker 应用程序的工具,它允许你使用 YAML 文件来定义应用程序的服务、网络和卷等内容,并在单个主机或多个主机上进行部署。Docker Compose 有以下版本:
docker stack
命令将Compose文件部署到Swarm集群中。在 docker-compose.yml
文件中指定的version必须与安装在主机上的Docker Compose版本相匹配。如果使用不同版本之间的兼容性问题,则可能会导致意外行为或错误。通常情况下,使用最新版本的Docker Compose是最好的选择,因为它包含最新的特性和修复了已知的漏洞。你可以通过运行以下命令来检查所安装的Docker Compose版本:
1 | 复制代码docker-compose version |
然后,在docker-compose.yml
文件中指定适当的版本号,例如:
1 | yaml复制代码version: "3.9" |
总之,Docker Compose有几个版本,每个版本都提供了不同的特性和兼容性。在编写docker-compose.yml
文件时,请确保所指定的version与主机上安装的Docker Compose版本相匹配,以避免任何问题。