php框架反序列化練習(php原生類反序列化)

  • 1、php數據庫數組反序列化取指定內容
  • 2、thinkphp3.2 模板輸出的反序列化
  • 3、這樣的字符串怎麼用php反序列化
  • 4、請寫出php變量序列化和反序列化的函數,並舉出1個應用例子
  • 5、php如何循環反序列化?
  • 6、這個網站幹什麼的 什麼是PHP反序列化靶機實戰

$str = ‘a:2:{i:0;b:0;s:8:”bankinfo”;a:1:{i:1;a:2{s:6:”bankid”;i:1;s:7:”cardnum”;s:4:”adda”;}}}’;

$res = unserialize($str);

echo $res[‘bankinfo’][1][‘cardnum’];

這個數組整個結構是

Array ( 

    [0] = false

    [bankinfo] = Array (

         [1] = Array ( 

             [bankid] = 1

             [cardnum] = adda 

         )

     )

)

這個只能把$Think.cookie.xxx這個變量反序列化之後才能讀取到數據了吧,可以用unserialize這個函數試一下,希望對你有幫助

這是網址的查詢串。PHP用parse_str函數轉換成數組

?php

$t=’do_sms=1data%5B%5D=1111111111111111data%5B%5D=22222222222222222′;

parse_str($t, $a);

var_dump($a);

array (size=2)

‘do_sms’ = string ‘1’ (length=1)

‘data’ =

array (size=2)

0 = string ‘1111111111111111’ (length=16)

1 = string ‘22222222222222222’ (length=17)

PHP中的序列化和反序列化分別通過函數serialize()和unserialize()即可實現。serialize()的參數可以是resource類型外的所有變量類型,最常見的是用來序列化對象,unseialize()將serialize的返回結果作為參數,進行反序列化,得到原對象。$str = serialize ($obj);…$obj222 = unserialize($str);現在可以用$object222對象來執行該對象可以執行的各種操作。在用serialize序列化對象時,會自動調用__sleep方法,__sleep方法必須返回一個數組,包含需要串行化的屬性。 PHP會拋棄其它屬性的值, 如果沒有__sleep方法,PHP將保存所有屬性,包括private屬性。用unserialize反序列化對象時,PHP 會調用__wakeup方法。__sleep和__wakeup方法可以根據實際需要,都添加上,也可以只要其中的一個,當然也可以都不要。下面給出一個序列化的代碼:共serialize.php和unserialize.php兩個文件。// serialize.php?php

class User

{

private $name;

private $id;

public $sex=”F”;

function __construct()

{

//give user a unique ID 賦予一個不同的ID

$this-id = uniqid();

}

function __sleep()

{

//do not serialize this-id 不串行化id

return(array(“name”,”sex”));

}

function __wakeup()

{

//give user a unique ID

$this-id = uniqid();

}

function p(){

echo “in function p() \t”;

return $this-name;

}

function setname($name){

$this-name = $name;

}

} //create object 建立一個對象

$u = new User;

$u-setname(“pphu”);

//serialize it 串行化

$s = serialize($u);

echo “in serialize.php br/”;

print_r($s);

echo “br/”;

print_r($u);

echo “br/br/”;

? //// unserialize.php?php

include(‘serialize.php’);

//global $s;

$u2 = unserialize($s);

echo “in unserialize.phpbr/”;

echo $u2-p().”br/”;

echo $u2-sex.”br/”;

print_r($u2);

?

1.構造HITCON類反序列化字符串,其中$method=’login’,$args數組’username’部分可用於構造SQL語句,進行SQL注入,’password’部分任意設置。

2.調用login()函數後,利用username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置username構造聯合查詢,使查詢結果為SoFun類反序列化字符串,設置file=‘flag.php’,需繞過__wakeup()函數。

3.繞過oadData()函數對反序列化字符串的驗證。

4.SoFun類 __destruct()函數調用後,包含flag.php文件,獲取flag,需繞過__wakeup()函數。

在我們講PHP反序列化的時候,基本都是圍繞着serialize(),unserialize()這兩個函數。那麼什麼是序列化呢,序列化說通俗點就是把一個對象變成可以傳輸的字符串。舉個例子,不知道大家知不知道json格式,這就是一種序列化,有可能就是通過array序列化而來的。而反序列化就是把那串可以傳輸的字符串再變回對象。而反序列化則比較容易出現漏洞。

這麼序列化一下然後反序列化,為什麼就能產生漏洞了呢?

這個時候,我們就要了解一下PHP裡面的魔術方法了,魔法函數一般是以__開頭,通常會因為某些條件而觸發不用我們手動調用:

在研究反序列化漏洞的時候,如果服務器能夠接收我們反序列化過的字符串、並且未經過濾的把其中的變量直接放進這些魔術方法裡面的話,就容易造成很嚴重的漏洞了。

所以這個網站其實希望告訴大家這個反序列化的問題,並提供一些實戰練習。

原創文章,作者:VK4QE,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/126336.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
VK4QE的頭像VK4QE
上一篇 2024-10-03 23:07
下一篇 2024-10-03 23:07

相關推薦

  • 金額選擇性序列化

    本文將從多個方面對金額選擇性序列化進行詳細闡述,包括其定義、使用場景、實現方法等。 一、定義 金額選擇性序列化指根據傳入的金額值,選擇是否進行序列化,以達到減少數據傳輸的目的。在實…

    編程 2025-04-29
  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • Ojlat:一款快速開發Web應用程序的框架

    Ojlat是一款用於快速開發Web應用程序的框架。它的主要特點是高效、易用、可擴展且功能齊全。通過Ojlat,開發人員可以輕鬆地構建出高質量的Web應用程序。本文將從多個方面對Oj…

    編程 2025-04-29
  • Zlios——一個多功能的開發框架

    你是否在開發過程中常常遇到同樣的問題,需要不斷去尋找解決方案?你是否想要一個多功能、易於使用的開發框架來解決這些問題?那麼,Zlios就是你需要的框架。 一、簡介 Zlios是一個…

    編程 2025-04-29
  • agavi開發框架

    Agavi是一個基於MVC模式的Web應用程序開發框架,以REST和面向資源的設計為核心思想。本文章將從Agavi的概念、優點、使用方法和實例等方面進行詳細介紹。 一、概念 Aga…

    編程 2025-04-29
  • Python unittest框架用法介紹

    Python unittest框架是Python自帶的一種測試框架,可以用來編寫並運行測試用例。在本文中,我們將從以下幾個方面詳細介紹Python unittest框架的使用方法和…

    編程 2025-04-29
  • com.alipay.sofa.bolt框架

    com.alipay.sofa.bolt框架是一款高性能、輕量級、可擴展的RPC框架。其廣泛被應用於阿里集團內部服務以及阿里雲上的服務。該框架通過NIO支持高並發,同時還內置了多種…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • 理解Java反序列化(Java Deserialization Vulnerability)

    本文將從多個方面深入探討Java反序列化漏洞,對於筆者所總結的經驗和教訓,以及掌握Java反序列化的設計模式、最佳實踐和防範措施。 一、Java反序列化漏洞概述 Java反序列化漏…

    編程 2025-04-28
  • Django框架:從簡介到項目實戰

    本文將從Django的介紹,以及如何搭建Django環境開始,逐步深入到Django模型、視圖、模板、表單,最後通過一個小型項目實戰,進行綜合性的應用,讓讀者獲得更深入的學習。 一…

    編程 2025-04-28

發表回復

登錄後才能評論