- 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