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

通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarCTF 2019]Easy Calc 1

题目环境:
image.png

依此输入以下内容并查看回显结果
1+1
1’
index.php
ls

image.png
image.png
image.pngimage.png

到这里没思路了

F12查看源代码
image.png

一定要仔细看啊,差点没找到,笑哭

访问calc.php文件
image.png

果然有点东西

PHP代码审计

error_reporting(0);关闭错误报告
通过GET方式传参的参数num
show_source函数将文件内容显示出来
参数num的值赋值给变量str

创建一个了名为blacklist的数组,该数组包含一系列字符,这些字符被认为是需要从目标字符串中排除的“非法”或“危险”字符。这些字符包括空格、制表符(‘\t’)、回车(‘\r’)、换行(‘\n’)、单引号(‘’‘)、双引号(")、反引号(`)、左方括号(’[‘)、右方括号(’]‘)、美元符号(’KaTeX parse error: Expected group after '^' at position 17: …)、反斜杠('')和尖括号('^̲') 使用foreach循环遍…blackitem。
在每次循环中,使用preg_match函数检查目标字符串 s t r 是否包含当前的黑名单项(即 str是否包含当前的黑名单项(即 str是否包含当前的黑名单项(即blackitem)。正则表达式’/’ . b l a c k i t e m . ′ / m ′ 用于匹配任何与当前黑名单项相匹配的字符。这里的 / m 是正则表达式的标记,表示多行模式。在这种模式下 , 和 blackitem . '/m'用于匹配任何与当前黑名单项相匹配的字符。这里的/m是正则表达式的标记,表示多行模式。在这种模式下,^和 blackitem./m用于匹配任何与当前黑名单项相匹配的字符。这里的/m是正则表达式的标记,表示多行模式。在这种模式下分别匹配每一行的开始和结束,而不仅仅是整个字符串的开始和结束。
如果在目标字符串中找到任何黑名单字符,即preg_match函数返回true,那么程序将立即停止执行,并输出“what are you want to do?”。
最后,这段代码结束foreach循环。

过滤内容:

  • 空格
  • 制表符(‘\t’)
  • 回车(‘\r’)
  • 换行(‘\n’)
  • 单引号(‘’')
  • 双引号(")
  • 反引号(`)
  • 左方括号(‘[’)
  • 右方括号(‘]’)
  • 美元符号(‘$’)
  • 反斜杠(‘’)
  • 尖括号(‘^’)

通过给参数num传参(数字和字母)进一步判断

?num=1
?num=a

正常回显:
image.png
回显报错:
image.png
F12网页源代码是否忽略一些东西?
image.png

提示存在WAF检测,猜测后台还存在一些过滤

空格绕过WAF检测的原理

一些攻击者可能会尝试利用WAF(Web Application Firewall)的特性,通过在恶意请求中插入特定的字符或字符串来绕过WAF的检测。其中一种常见的方法是使用URL编码或转义字符来绕过WAF。
当攻击者使用空格字符时,WAF通常会将其视为无效字符而将其过滤掉。然而,攻击者可以使用URL编码或转义字符来将空格字符编码为有效的URL编码字符。
例如,使用URL编码,空格可以被编码为"%20"。攻击者可以在恶意请求中使用这个编码后的空格字符来绕过WAF的过滤。
当WAF接收到包含URL编码空格的请求时,它可能会将其解释为有效的URL编码字符,而不是一个空格字符。这样,攻击者就可以在请求中插入有效的URL编码字符,从而绕过WAF的过滤。
需要注意的是,这种方法并不是所有WAF都有效,因为不同的WAF可能会有不同的特性和行为。此外,攻击者还需要了解目标WAF的特性和行为,以便选择合适的方法来绕过其检测。

使用空格绕过WAF检测

?%20num=a

成功绕过WAF检测
image.png
查看此题目环境的一些配置信息

phpinfo()是PHP编程语言的内置函数,用来查询PHP相关配置和重要信息等等

?%20num=phpinfo()
image.png

disable_functions是PHP内置的一个设置选项,类似于黑名单,用来禁用危险函数、命令、关键字等等,用来提高网站和WAF的安全性
**从红框那里可以看到过滤了很多命令执行函数,比如:**passthru、exec、system等等

从这里看的话命令执行是行不通了,既然phpinfo()可以打通,那咱们就用PHP内置输出函数来获取flag值

PHP的输出函数有:

  1. echo()可输出字符串
  2. print()、print_r()、printf()、sprintf()、var_dump()可输出变量的内容、类型或字符串的内容、类型、长度等
  3. die()输出内容并退出程序

经过测试只有print_r()函数和var_dump()函数可以输出内容

靠这些还远远不够

还需要用到两个函数和一个方法
scandir() 函数返回指定目录中的文件和目录的数组,类似于Linux里面的“ls”命令。
file_get_contents() 函数把整个文件读入一个字符串中。
字符串转ASCII码chr()对应表

为什么PHP可以识别ASCII码chr()对应表?

PHP可以识别ASCII码chr()对应表,是因为PHP是一种通用的服务器端脚本语言,它可以处理文本数据。ASCII码是一种7位无符号整数编码系统,它使用数字0-127来表示所有的字符、数字和标点符号等。在PHP中,chr()函数可以将ASCII码转换为相应的字符。因此,在编写PHP程序时,我们可以使用chr()函数将ASCII码转换为相应的字符,以便在程序中使用它们。

d8b2579559316ac65a2e974f2352c33d_d18bd8a7c51c409ca6c5b42d64f96ae8.png
更详细内容可以参考我这篇文章https://blog.csdn.net/m0_73734159/article/details/133854073?spm=1001.2014.3001.5502

查看根目录下的所有文件(print_r和var_dump两种方法对比参考)
?%20num=print_r(scandir(chr(47)))
image.png
?%20num=var_dump(scandir(chr(47)))
image.png
发现f1agg文件
探测f1agg文件内容

根目录下的f1agg文件对应ASCII码chr()对应表依次是

  • / => chr(47)
  • f => chr(102)
  • 1=> chr(49)
  • a => chr(97)
  • g => chr(103)
  • g => chr(103)

使用连接符"."进行连接:

/f1agg => chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)

?%20num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
image.png
?%20num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
image.png

这两个函数不同回显结果,大同小异,大家可以对比进行深入了解这两个打印函数

得到flag:
flag{fc4b0414-1e6c-4391-89d8-c5f1dfe3e0dd}

相关文章:

通过一道题目带你深入了解WAF特性、PHP超级打印函数、ASCII码chr()对应表等原理[RoarCTF 2019]Easy Calc 1

题目环境: 依此输入以下内容并查看回显结果 11 1’ index.php ls 到这里没思路了 F12查看源代码 一定要仔细看啊,差点没找到,笑哭 访问calc.php文件 果然有点东西 PHP代码审计 error_reporting(0);关闭错误报告 通过GET方式传参的参数num sho…...

类直径树上贪心

http://cplusoj.com/d/senior/p/SS231109C 场上想到枚举点&#xff0c;然后最大值为高&#xff0c;然后可以求最大值。但是感觉计数会重 计数其实不会重&#xff0c;如图中&#xff0c;红色线段显然比蓝色线段优 所以我们枚举3叉点时没错的 #include<bits/stdc.h> usin…...

求职招聘小程序源码系统+社交招聘+多城市招聘 带完整搭建教程

大家好&#xff0c;今天罗峰来给大家分享一款求职招聘小程序源码系统。目前&#xff0c;求职招聘市场在不断变革。传统的招聘网站已经无法满足人们对于高效、便捷、多元化的招聘需求。该系统集求职招聘、社交招聘、多城市招聘等功能于一体&#xff0c;旨在为用户提供更加便捷、…...

Java Web 安全实战:从登录到退出

Java Web 安全实战&#xff1a;从登录到退出 1. 介绍 在当今互联网时代&#xff0c;用户信息安全至关重要。在Java Web开发中&#xff0c;Spring Security是一个强大且灵活的身份验证和访问控制框架&#xff0c;它可以帮助我们构建安全可靠的应用程序。本文将介绍如何使用Spr…...

08.Diffusion Model数学原理分析(下)

文章目录 denoising matching term σ t z \sigma_tz σt​z的猜想Diffusion Model for SpeechDiffusion Model for TextMask-Predict 部分截图来自原课程视频《2023李宏毅最新生成式AI教程》&#xff0c;B站自行搜索。 书接上文。 denoising matching term E q ( x t ∣ x 0 …...

什么样的CRM系统更适合外贸企业?

外贸CRM系统作为外贸客户关系管理的工具&#xff0c;已经成为了当下外贸企业对外贸易过程中不可或缺的一环。那什么样的CRM系统更适合外贸企业&#xff1f;小Z向您推荐Zoho CRM。下面说说它到底有什么好处和作用。 一、搭建更高效的客户关系管理系统 外贸企业从前期推广、开发…...

selenium自动化测试入门 —— 键盘鼠标事件ActionChains

在使用 Selenium WebDriver 做自动化测试的时候&#xff0c;会经常模拟鼠标和键盘的一些行为。比如使用鼠标单击、双击、右击、拖拽等动作&#xff1b;或者键盘输入、快捷键使用、组合键使用等模拟键盘的操作。在 WebDeriver 中&#xff0c;有一个专门的类来负责实现这些测试场…...

高级运维学习(十四)Zabbix监控(一)

一 监控概述 1 监控的目的 &#xff08;1&#xff09;报告系统运行状况 每一部分必须同时监控内容包括吞吐量、反应时间、使用率等 &#xff08;2&#xff09;提前发现问题 进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 2 监控的资源类别 …...

vite + electron引入itk报错

代码 import { readImageArrayBuffer } from itk-wasm console.log(readImageArrayBuffer)通过itk-wasm官网&#xff0c;创建新的项目vitevue&#xff08;vue2或者vue3&#xff09;&#xff0c;都没问题。加入electeon后包此错。通过排查&#xff0c;意外找到原因&#xff0c;…...

大厂面试题-MySQL为什么使用B+Tree作为索引结构

从几个方面来回答&#xff1a; 首先&#xff0c;常规的数据库存储引擎&#xff0c;一般都是采用B树或者B树来实现索引的存储。 (如图)因为B树是一种多路平衡树&#xff0c;用这种存储结构来存储大量数据&#xff0c;它的整个高度会相比二叉树来说&#xff0c;会矮很多。 而对…...

Tomcat的Engine容器

https://tomcat.apache.org/tomcat-10.1-doc/config/engine.html Engine元素代表与一个特定的Catalina Service关联的、整体的请求处理系统。它从一个或多个Connector接收并处理请求、返回完整的响应给Connector&#xff0c;以便最终传输给客户端。 在Service元素内部&#xf…...

vscode绿色行数设置

"workbench.colorCustomizations": {"editorLineNumber.foreground": "#00ff00"},...

闪站侠洗衣洗鞋管理系统app小程序开发;

闪站侠洗护软件系统为您提供全面的洗衣洗鞋解决方案&#xff0c;系统多门店&#xff0c;多网点。为您开通公中号小程序&#xff0c;并与顺丰、天猫、抖音、美团点评等第三方平台紧密连接。 我们解决洗衣工厂/门店的五大问题&#xff1a; 一、效率 从门店收衣到工厂出库&#xf…...

【操作系统】测试一

文章目录 单选题判断题简答题 单选题 &#xff08; &#xff09;不是基本的操作系统。 A. 批处理操作系统 B. 分时操作系统 C. 实时操作系统 D. 网络操作系统 【 正确答案: D】 操作系统提供给程序员的接口是&#xff08; &#xff09;。 A. 进程 B. 系统调用 C. 库函数 D. B和…...

如何用sklearn对随机森林调参

文章目录 一、概述二、实操1、导入相关包2、导入乳腺癌数据集&#xff0c;建立模型3、调参 三、总结 Link&#xff1a;https://zhuanlan.zhihu.com/p/126288078 Author&#xff1a;陈罐头 一、概述 sklearn是目前python中十分流行的用来实现机器学习的第三方包&#xff0c;其中…...

Java中单例模式

什么是单例模式&#xff1f; 1. 构造方法私有化 2. 静态属性指向实例 3. public static的 getInstance方法&#xff0c;返回第二步的静态属性 饿汉式是立即加载的方式&#xff0c;无论是否会用到这个对象&#xff0c;都会加载。 package charactor;public class GiantDragon…...

第1章 现代通信网概述

文章目录 1.1 通信网的定义1.2 通信网的分类1.3 通信网的结构1.4 通信网的质量要求 1.1 通信网的定义 1.1.1 通信系统 1.1.2 通信网的定义 通信网是由一定数量的节点 (包括终端节点、交换节点) 和连接这些节点的传输链路有机地组织在一起&#xff0c;以实现两个或多个规…...

99%的时间里使用的14个git命令

学习14个Git命令&#xff0c;因为你将会在99%的时间里使用它们 【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/details/117297837?spm1001.2014.3001.5502 必须了解的命令整理 1&…...

适用于 iOS 的 10 个最佳数据恢复工具分享

在当今的数字时代&#xff0c;我们的移动设备占据了我们生活的很大一部分。从令人难忘的照片和视频到重要的文档和消息&#xff0c;我们的 iOS 设备存储了大量我们无法承受丢失的数据。然而&#xff0c;事故时有发生&#xff0c;无论是由于软件故障、无意删除&#xff0c;甚至是…...

泛微E-Mobile 6.0命令执行漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、漏洞原理 泛微E-Mobile 6.0存在命令执行漏洞的问题&#xff0c;在…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...