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

news2024/12/23 1:08:14

题目环境:
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}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1189848.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ECA-Net(Efficient Channel Attention Network)

ECA-Net(Efficient Channel Attention Network)是一种用于计算机视觉任务的注意力模型,旨在增强神经网络对图像特征的建模能力。本文详细介绍ECA-Net注意力模型的结构设计,包括其背景、动机、组成部分以及工作原理。ECA-Net模块的…

河南开放大学与电大搜题微信公众号:携手共进,助力学习之路

作为河南省内颇具影响力和声誉的高等教育机构之一,河南开放大学一直致力于提供优质的教育资源和灵活的学习方式,以满足广大学习者的需求。而在这个追求知识的时代,学习者们尤其需要一个便捷、高效的工具来辅助学习。电大搜题微信公众号应运而…

viple入门(四)

(1)行打印 主要用于在运行窗口中显示数据,打印完成后,自动换行。 注意事项:不可同时打印两个数据,例如 解决方案1:使用或并,使得每次进入行打印的数据只有一个,缺点&am…

推荐大学生考研党都来使用的白板笔记软件!上岸卷王必备!

考研这条路,对于很多大学生来说,是一条漫漫长路。相信很多人都有这样的体会:看了大量的书籍,记了大量的笔记,但是到了临近考试的时候,却发现复习的内容和思路都不是很清晰,效率不高。 针对这个…

基于SpringBoot+Vue的体育馆管理系统

基于SpringBootVue的体育馆管理系统的设计与实现~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 器材详情 登录界面 管理员界面 摘要 SpringBootVue的体育馆管理系统是…

多路转接(上)——select

目录 一、select接口 1.认识select系统调用 2.对各个参数的认识 二、编写select服务器 1.两个工具类 2.网络套接字封装 3.服务器类编写 4.源文件编写 5.运行 一、select接口 1.认识select系统调用 int select(int nfds, fd_set readfds, fd_set writefds, fd_set ex…

服务器部署 Nacos 获取不到配置浏览器可以访问

服务器部署 Nacos 获取不到配置浏览器可以访问 📔 千寻简笔记介绍 千寻简笔记已开源,Gitee与GitHub搜索chihiro-notes,包含笔记源文件.md,以及PDF版本方便阅读,且是用了精美主题,阅读体验更佳&#xff0c…

Jmeter+ant+jenkins接口自动化测试

平台简介 一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成。Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,所以三者组合在一起可以构成一个功能完善的接口自动…

第四章:人工智能深度学习教程-激活函数(第三节-Pytorch 中的激活函数)

在本文中,我们将了解 PyTorch 激活函数。 目录 什么是激活函数以及为什么使用它们? Pytorch 激活函数的类型 ReLU 激活函数: Python3 Leaky ReLU 激活函数: Python3 S 形激活函数: Python3 Tanh 激活函数&am…

计算机丢失mfc140.dll是什么意思?附送修复教程

mfc140.dll是Microsoft Foundation Classes(MFC)库的一部分,是一种动态链接库(DLL)文件。MFC库是Microsoft提供的一种C编程框架,它为开发者提供了许多方便的工具和类,以简化Windows应用程序的开…

兴达易控485Modbus转profinet网关应用于搅拌站的配置案例

在兴达易控485Modbus转profinet网关(XD-MDPN100)的帮助下,该搅拌站采用了双行星动力搅拌桨混合器与PLC和变频器进行通信,从而实现对变频器的精确控制,大大提高了搅拌过程的稳定性和效率。 该方案还具有高度的灵活性和可扩展性,使…

Oracle11g for centos7

准备工作 x86 centos7 oracle11G 环境搭建 配置好虚拟机,网络通畅,建议最少3G内存。 安装依赖 yum install binutils compat-libstdc-33 glibc* ksh gcc gcc-c libgcc libstdc* libaio libaio-devel libXext libX11 libXau libxcb libXi make sy…

计算机丢失mfc100.dll如何恢复,详细解析mfc100.dll文件丢失解决方法

在计算机使用过程中,我们可能会遇到一些错误提示,比如“mfc100.dll丢失”。这是因为动态链接库(DLL)文件是Windows操作系统的重要组成部分,它们包含了许多程序运行所需的函数和数据。当这些DLL文件丢失或损坏时&#x…

2023年腾讯云双11活动入口在哪里?

2023年双11腾讯云推出了11.11大促优惠活动,下面给大家分享腾讯云双11活动入口、活动时间、活动详情,希望可以助力大家轻松上云! 一、腾讯云双11活动入口 活动地址:点此直达 二、腾讯云双11活动时间 腾讯云双11活动时间跨度很长…

【C++干货铺】STL简述 | string类的使用指南

个人主页点击直达:小白不是程序媛 C系列专栏:C干货铺 代码仓库:Gitee 目录 什么是STL STL的版本 STL的六大组件 STL的缺陷 string类 C语言中的字符串 标准库中的string类 string类常用的接口使用指南 string类中常见的构造 strin…

【Linux精讲系列】——vim详解

​作者主页 📚lovewold少个r博客主页 ⚠️本文重点:c入门第一个程序和基本知识讲解 👉【C-C入门系列专栏】:博客文章专栏传送门 😄每日一言:宁静是一片强大而治愈的神奇海洋! 目录 目录 ​作者…

Docker 学习路线 13:部署容器

部署容器是使用Docker和容器化管理应用程序更高效、易于扩展和确保跨环境一致性性能的关键步骤。本主题将为您概述如何部署Docker容器以创建和运行应用程序。 概述 Docker容器是轻量级、可移植且自我包含的环境,可以运行应用程序及其依赖项。部署容器涉及启动、管…

vivado时序分析-2时序分析关键概念

时序分析关键概念 1、最大和最小延迟分析 时序分析属静态验证 , 旨在验证在硬件上加载并运行设计后 , 其时序行为的可预测性。它会将各种制造和环境变化因素组合到延迟模型中并按时序角及其变化量加以分组, 将所有这些要素一并纳入考量范围。…

XSS 跨站点脚本漏洞详解

文章目录 漏洞概述XSS漏洞原理xss漏洞危害xss漏洞验证XSS漏洞分类反射型存储型DOM型 固定会话攻击原理简单xss注入复现 XSS 攻防xss构造方法利用标签符号<>事件响应javascript伪协议其他标签 XSS 变形方式xss防御黑白名单策略输入过滤 案例XSS 盲打 漏洞概述 ​ 跨站点脚…

简单理解 Sentinel 滑动窗口实现原理

theme: serene-rose 1. 引言 Hi&#xff0c;你好&#xff0c;我是有清 对于刚经历过双 11 的电商人来说&#xff0c;限流这个词肯定在 10.24 的晚 20.00 点被提起过 限流作为保护我们系统不被流量冲垮的手段之一&#xff0c;建议每个电商人深入了解学习&#xff0c;什么&#x…