当前位置: 首页 > news >正文

CTF-Web习题:[BJDCTF2020]ZJCTF,不过如此

题目链接:[BJDCTF2020]ZJCTF,不过如此

解题思路

访问靶场链接,出现的是一段php源码,接下来做一下代码审阅,发现这是一道涉及文件包含的题
在这里插入图片描述
主要PHP代码语义:

file_get_contents($text,'r');$text变量所制定的文件读入一个字符串中
'r'表示只读preg_match("/flag/",$file);
正则表达式,判断文件中是否包含"flag"字符串include($file);
文件包含函数,如果文件中是普通字符串,则输出
如果有php代码,则会执行

通过代码审计,发现我们可以将text设置为I have a dream,来进入循环,并利用伪协议读取并加密next.php文件源码,利用include函数输出从而得到next.php文件源码。

接下来尝试从url中设置text=I have a dream,试图通过get赋值,但无果,因为这样会变成将text变量的值赋为I have a dream。我们的目的是使text这个变量所制定的文件中写入I have a dream,进而通过比较判断语句,此时就要想想办法,怎么做到?

利用PHP中的伪协议可以做到:
1、php://input :php中的特殊输入流,用于读取POST中的值
在这里插入图片描述

2、data:///变量名/plain,明文:php中的数据传输协议,与php://input类似,将plain后的明文或是Base64密文传入字符串
在这里插入图片描述
Base64密文语法:?text=data://text/plain;base64,密文

以上两种方法都能够通过比较。此处涉及PHP伪协议知识,详见:CTF文件包含教程

回到源码,通过比较语句后,下一步就是利用include函数得到next.php文件源码了,我们可以用php://filter/协议来读取源码:

php://filter/read=convert.Base64-encode/resource=next.php
其中:
php://filter表示php过滤器
/read后面跟上要使用的过滤器,这里的convert.Base64-encode就是调用Base64过滤器对文件内容进行编码
/resource后面是输入的文件名

构造好的url如上文所示,访问即可得到密文,解码后得到next.php源码:

<?php
$id = $_GET['id'];
$_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str);
}foreach($_GET as $re => $str) {echo complex($re, $str). "\n";
}function getFlag(){@eval($_GET['cmd']);
}

至此先告一段落,主要掌握文件包含漏洞知识点,详见:文件包含详解,后续知识点还未学习,待学习后继续解析。

http://www.lryc.cn/news/402715.html

相关文章:

  • 【IEEE出版】第四届能源工程与电力系统国际学术会议(EEPS 2024)
  • 浅谈Vue:text-align: center、align-items: center、justify-content: center三种居中的区别和用法
  • 理解UI设计:UI设计师的未来发展机遇
  • 关键字 internal
  • C学习(数据结构)-->单链表习题
  • MATLAB6:M文件和控制流
  • 网页数据抓取:融合BeautifulSoup和Scrapy的高级爬虫技术
  • Linux应用——网络基础
  • 白骑士的C++教学实战项目篇 4.3 多线程网络服务器
  • Go语言并发编程-Context上下文
  • React@16.x(62)Redux@4.x(11)- 中间件2 - redux-thunk
  • 【Qt】QTcpServer/QTcpSocket通信
  • 【时时三省】单元测试 简介
  • 中间件——Kafka
  • 中介者模式(行为型)
  • 定个小目标之刷LeetCode热题(45)
  • golang 实现负载均衡器-负载均衡原理介绍
  • spring是如何解决循环依赖的,为什么不是两级
  • 大模型预训练优化参数设置
  • PHP pwn 学习 (2)
  • 【Python学习笔记】:Python爬取音频
  • 4 C 语言控制流与循环结构的深入解读
  • vue排序
  • agv叉车slam定位精度测试标准化流程
  • 实战打靶集锦-31-monitoring
  • 小程序-模板与配置
  • 交叉编译aarch64的Qt5.12.2,附带Mysql插件编译
  • 好用的Ubuntu下的工具合集[持续增加]
  • Xcode 16 beta3 真机调试找不到 Apple Watch 的尝试解决
  • Three.JS 使用RGBELoader和CubeTextureLoader 添加环境贴图