46、WEB攻防——通用漏洞PHP反序列化原生類漏洞繞過公私有屬性

文章目錄

    • 幾種常用的魔術方法
      • 1、__destruct()
      • 2、__tostring()
      • 3、__call()
      • 4、__get()
      • 5、__set()
      • 6、__sleep()
      • 7、__wakeup()
      • 8、__isset()
      • 9、__unset()
      • 9、__invoke()
    • 三種變量屬性
    • 極客2019 PHP
    • php原生類

幾種常用的魔術方法

1、__destruct()

當刪除一個對象或對象操作終止時被調用,其最主要的作用是拿來做垃圾回收機制。當對象銷毀時會調用此方法,對象銷毀:1.用戶主動銷毀對象,使用unset()函數;2.當程序結束時由引擎自動銷毀。
在這里插入圖片描述

2、__tostring()

在對象當作字符串的時候會被調用。但是需要注意的是,執行完__toString()之后,會有返回值。
在這里插入圖片描述

3、__call()

調用某個方法,若方法存在,則直接調用;若不存在,則會調用__call()方法。
在這里插入圖片描述

4、__get()

讀取一個對象的屬性時,若屬性存在,則直接返回屬性值;若不存在,則會調用__get()魔術方法。
在這里插入圖片描述

5、__set()

設置一個對象的屬性時,若屬性存在,則直接賦值;若屬性不存在或者無法訪問(私有)的屬性時,則會調用__set()函數。

__set($name, $value)

  • 用來為私有成員屬性設置屬性值;
  • 第一個參數為需要設置值多的屬性名,第二個參數為需要設置的屬性值,__set方法沒有返回值。

在這里插入圖片描述

6、__sleep()

serialize()之前被調用,可以指定要序列化的對象屬性。
在這里插入圖片描述

7、__wakeup()

反序列化恢復對象之前調用該方法,也就是使用unserialize()之前會先調用__wakeup()
在這里插入圖片描述

var_dump會輸出反序列化內容。

8、__isset()

檢測對象的某個屬性是否存在時執行該函數,當對不可訪問屬性調用isset()empty()時,觸發__isset()
在這里插入圖片描述

9、__unset()

在不可訪問的屬性上使用unset()時觸發, 或銷毀對象的某個屬性時執行此函數。
在這里插入圖片描述

  • unset()函數不僅觸發__unset(),而且會觸發__destruct()
  • 三種對象變量屬性:
    • public:在本類內部、外部類、子類中都可以訪問;
    • protected:只在本類或子類或父類中可以訪問;
    • private:在本類內部可以訪問。
  • 序列化數據顯示:
    • private屬性序列的時候格式是%00類名%00成員名
    • protected屬性序列的時候格式是%00*%00成員名
  • 使用new是創建外部類(測試類),子類是通過繼承extends父類得到的。

9、__invoke()

當調用函數的方式調用一個對象時觸發。
在這里插入圖片描述

三種變量屬性

  • 三種對象變量屬性:
    • public:在本類內部、外部類、子類中都可以訪問;
    • protected:只在本類或子類或父類中可以訪問;
    • private:在本類內部可以訪問。
  • 序列化數據顯示:
    • private屬性序列的時候格式是%00類名%00成員名
    • protected屬性序列的時候格式是%00*%00成員名

在這里插入圖片描述

極客2019 PHP

反序列化利用大概分為三類:

  • 魔術方法的調用邏輯,如觸發條件;
  • 語言原生類的調用邏輯,如SoapClient
  • 語言自身的安全缺陷,如CVE-2016-7124.

首先,通過目錄掃描可以發現網站源碼保存在www.zip中(這里就不作敘述);
index.php中包含flag.php,并且接收select傳參,并且對傳參內容進行反序列化。

在這里插入圖片描述
flag.php中存在一個className,而且flag在__destruct()魔術方法中,有兩種方式觸發__destruct()魔術方法:1.用戶主動銷毀對象,使用unset()函數;2.當程序結束時由引擎自動銷毀。也就是說,當程序執行完,必定會觸發__destruct()魔術方法。因此,我們只需要滿足__destruct()魔術方法中的兩個條件:username=admin&password=100。由于__wakeup()的存在,使得index.php中的unserialize執行之前,就會自動觸發__wakeup()
故獲取flag的關鍵在于:繞過__wakeup()。這里可以使用CVE-2016-7124進行繞過__wakeup()CVE-2016-7124:對象中的屬性個數超過實際屬性個數會繞過__wakeup()

class Name{private $username = 'nonono';private $password = 'yesyes';public function __construct($username,$password){$this->username = $username;$this->password = $password;}function __wakeup(){$this->username = 'guest';}function __destruct(){if ($this->password != 100) {echo "</br>NO!!!hacker!!!</br>";echo "You name is: ";echo $this->username;echo "</br>";echo "You password is: ";echo $this->password;echo "</br>";die();}if ($this->username === 'admin') {global $flag;echo $flag;}else{echo "</br>hello my friend~~</br>sorry i can't give you the flag!";die(); }}
}

2改為3,即可獲取flag。
在這里插入圖片描述

php原生類

php原生類
在這里插入圖片描述

  1. PHP有哪些原生類

    //查找PHP所有原生類
    <?php
    $classes = get_declared_classes();
    foreach ($classes as $class) {$methods = get_class_methods($class);foreach ($methods as $method) {if (in_array($method, array('__destruct','__toString','__wakeup','__call','__callStatic','__get','__set','__isset','__unset','__invoke','__set_state'))) {print $class . '::' . $method . "\n";}}
    } 
    
  2. 常見使用的原生類
    淺析PHP原生類

  3. 配合官方文檔利用php原生類

  4. 反序列化字符逃逸
    [安恒月賽]反序列化字符逃逸

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

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

相關文章

關于 yarn 的中央倉庫 registry.yarnpkg.com

"Yarn" 是一個開源的 JavaScript 包管理工具&#xff0c;用于管理項目中的依賴關系。Yarn 通過一個叫做 "registry" 的中央倉庫來存儲和檢索各種 JavaScript 包。這個中央倉庫可以通過 https://registry.yarnpkg.com/ 訪問&#xff0c;它是 Yarn 包管理系統…

像用Excel一樣用Python:pandasGUI

文章目錄 啟動數據導入繪圖 啟動 眾所周知&#xff0c;pandas是Python中著名的數據挖掘模塊&#xff0c;以處理表格數據著稱&#xff0c;并且具備一定的可視化能力。而pandasGUI則為pandas打造了一個友好的交互窗口&#xff0c;有了這個&#xff0c;就可以像使用Excel一樣使用…

數據庫運維01

數據備份多重方案 核心sql語句 mysql復制架構 mysql 生產實踐 mysql可用的集群和中間件 linux環境 linux的命令要掌握 dba數據庫管理員 it部門負責數據庫維護 一定規模的企業 健康良好的運行數據庫 對數據庫做策略&#xff0c;保證數據庫的穩定 查數據要盡快的返回 復雜的數據需…

【Spring Boot 3】的安全防線:整合 【Spring Security 6】

簡介 Spring Security 是 Spring 家族中的一個安全管理框架。相比與另外一個安全框架Shiro&#xff0c;它提供了更豐富的功能&#xff0c;社區資源也比Shiro豐富。 一般來說中大型的項目都是使用SpringSecurity 來做安全框架。小項目有Shiro的比較多&#xff0c;因為相比與Sp…

Linux線程【互斥與同步】

目錄 1.資源共享問題 1.1多線程并發訪問 1.2臨界區和臨界資源 1.3互斥鎖 2.多線程搶票 2.1并發搶票 2.2 引發問題 3.線程互斥 3.1互斥鎖相關操作 3.1.1互斥鎖創建與銷毀 3.1.2、加鎖操作 3.1.3 解鎖操作 3.2.解決搶票問題 3.2.1互斥鎖細節 3.3互斥…

github用法詳解

本文是一篇面向全體小白的文章,圖文兼備。為了讓小白們知道如何使用GitHub,我努力將本文寫得通俗易懂,盡量讓剛剛上網的小白也能明白。所以各位程序員們都可以滑走了~ 啥是GitHub? 百度百科會告訴你, GitHub是一個面向開源及私有軟件項目的托管平臺,因為只支持Git作為…

大模型訓練——PEFT與LORA介紹

大模型訓練中的PEFT&#xff08;Parameter-Efficient Fine-Tuning&#xff09;與LoRA&#xff08;Low-Rank Adaptation&#xff09;是兩種重要的技術&#xff0c;它們在大型預訓練模型的應用中發揮著重要作用。 首先&#xff0c;讓我們來了解一下PEFT。PEFT是一種參數高效的微…

GO基本類型

Go語言同時提供了有符號和無符號的整數類型。 有符號整型&#xff1a;int、int8、int64、int32、int64無符號整型&#xff1a;uint、uint8、uint64、uint32、uint64、uintptr 有符號整型范圍&#xff1a;-2^(n-1) 到 2^(n-1)-1 無符號整型范圍: 0 到 2^n-1 實際開發中由于編…

英語中的提問方式(問法)(bug提問、bug描述)

文章目錄 英語提問方式一、單詞、短語、句子的意思1.1 提問單詞的意思1.2 提問短語的意思1.3 提問句子的意思 二、在編程中提問2.1 提問bug2.2 請求代碼幫助 如何提出反問句1. 構建反問句的基本結構2. 提問反問句的方法3. 理解反問句的意圖 在口語中提問&#xff1a;確保清晰度…

Topaz Gigapixel AI:讓每一張照片都煥發新生mac/win版

Topaz Gigapixel AI 是一款革命性的圖像增強軟件&#xff0c;它利用先進的人工智能技術&#xff0c;能夠顯著提升圖像的分辨率和質量。無論是攝影愛好者還是專業攝影師&#xff0c;這款軟件都能幫助他們將模糊的、低分辨率的照片轉化為清晰、細膩的高分辨率圖像。 Topaz Gigap…

JavaWeb——011 SpringBootWeb綜合案例(刪除/修改員工、文件上傳、配置文件)

SpringBootWeb案例 目錄 SpringBootWeb案例1. 新增員工1.1 需求1.2 接口文檔1.3 思路分析1.4 功能開發1.5 功能測試1.6 前后端聯調 2. 文件上傳2.1 簡介2.2 本地存儲2.3 阿里云OSS2.3.1 準備2.3.2 入門2.3.3 集成 3. 修改員工3.1 查詢回顯3.1.1 接口文檔3.1.2 實現思路3.1.3 代…

07 編譯器

目錄 編譯過程編譯器查看詳解函數庫自動化構建工具進度條程序 1. 編譯過程 預處理: a. 去注釋 b.宏替換 c.頭文件展開 d.條件編譯 編譯: 匯編 匯編: 可重定向二進制目標文件 鏈接: 鏈接多個.o, .obj合并形成一個可執行exe gcc編譯c程序, g編譯c程序 2. 編譯器查看 輸入gcc …

mac蘋果電腦c盤滿了如何清理內存?2024最新操作教程分享

蘋果電腦用戶經常會遇到麻煩:內置存儲器(即C盤)空間不斷縮小&#xff0c;電腦運行緩慢。在這種情況下&#xff0c;蘋果電腦c盤滿了怎么清理&#xff1f;如何有效清理和優化存儲空間&#xff0c;提高計算機性能&#xff1f;成了一個重要的問題。今天&#xff0c;我想給大家詳細介…

備戰藍橋杯---線段樹基礎2

今天我們把線段樹的另一個模板看一下&#xff1a; 在這里&#xff0c;我們注意到乘的操作&#xff0c;因此我們用兩個懶標記來分別表示加和乘&#xff0c;這時我們面臨了一個問題&#xff0c;就是當我們把標記往下傳時&#xff0c;它的兒子怎么知道是先乘還是先加&#xff1f; …

2025張宇考研數學,百度網盤視頻課+36講PDF講義+真題

張宇老師的課屬于幽默生動&#xff0c;會讓一個文科生愛上數學&#xff0c;但是有的同學不知道在哪看&#xff0c;可以看一下&#xff1a;2025張宇考研數學全程網盤 docs.qq.com/doc/DTmtOa0Fzc0V3WElI 可以粘貼在瀏覽器 張宇30講作為一本基礎講義&#xff1a;和教材…

java的線程池介紹

什么是線程池&#xff1f; 線程池是一種用于管理和復用線程的機制&#xff0c;旨在減少線程的創建和銷毀次數&#xff0c;提高線程的可重用性和執行效率。通過線程池&#xff0c;可以控制線程的數量、數量大小以及線程的執行方式&#xff0c;從而更加有效地處理并發任務。 線…

代碼隨想錄刷題第48天

今天來看看股票市場。第一題是買賣股票的最佳時機https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/&#xff0c;首先想到了暴力解法&#xff0c;兩層for循環&#xff0c;時間復雜度為n * n&#xff0c;代碼超時了。 class Solution { public:int m…

如何使用公網地址遠程訪問內網Nacos UI界面查看注冊服務

文章目錄 1. Docker 運行Nacos2. 本地訪問Nacos3. Linux安裝Cpolar4. 配置Nacos UI界面公網地址5. 遠程訪問 Nacos UI界面6. 固定Nacos UI界面公網地址7. 固定地址訪問Plik Nacos是阿里開放的一款中間件,也是一款服務注冊中心&#xff0c;它主要提供三種功能&#xff1a;持久化…

關于gossip協議

Gossip協議&#xff0c;也稱為流言協議&#xff0c;是一種在分布式系統中用于節點之間通信和數據同步的算法。它的設計靈感來自于人類社交中的流言傳播機制&#xff1a;一個人告訴幾個人某個消息&#xff0c;這幾個人再各自告訴其他幾個人&#xff0c;如此反復&#xff0c;最終…

6、wuzhicms代碼審計

wuzhicms代碼審計 前言 安裝環境配置 服務器要求 Web服務器: apache/nginx/iis PHP環境要求:支持php5.2、php5.3、php5.4、php5.5、php5.6、php7.1 (推薦使用5.4或更高版本!) 數據庫要求: Mysql5www/install文件夾即可進入安裝頁面 審計開始 首頁文件index.php&#xff0c…