pdo (php data objects)
序列化:物件(陣列)=> 字串
物件私有化成員會自動新增類名;如果是protected變數則會新增* 號,並且字首新增空位元組
目的:1.將複雜的陣列資料型別轉換為字串,方便陣列存庫操作
2.物件在網路上傳輸時
3.物件儲存到檔案中時
serialize() 函式會檢查類中是否存在乙個魔術方法 __sleep()。如果存在,該方法會先被呼叫,然後才執行序列化操作。此功能可以用於清理物件,並返回乙個包含物件中所有應被序列化的變數名稱的陣列。如果該方法未返回任何內容,則 null 被序列化,並產生乙個 e_notice 級別的錯誤。
序列化與__sleep()魔法方法的關係:相當於物件與建構函式之間的關係。
__sleep()需要返回乙個陣列,陣列的乙個成員對應著物件的乙個屬性名字,預設為全部屬性的名字,而我們自己建立的__sleep()函式可以剔除我們不需要的屬性名字,這樣在序列化時就不會返回該屬性值了。
serialize()函式的引數就是__sleep()函式的返回值。
<?php
class
animal
function
__sleep()
}$cat
=new
animal
("小花貓",5
,20);
var_dump
(serialize
($cat))
;?>
反序列化:字串 => 物件(陣列)
unserialize() 會檢查是否存在乙個 __wakeup() 方法。如果存在,則會先呼叫 __wakeup 方法,預先準備物件需要的資源。例如重新建立資料庫連線,或執行其它初始化操作。
當傳給 unserialize() 的引數可控時,我們可以通過傳入乙個精心構造的序列化字串,從而控制物件內部的變數甚至是函式。unserialize()後會導致__wakeup() 或__destruct()的直接呼叫,中間無需其他過程。因此最理想的情況就是一些漏洞/危害**在__wakeup() 或__destruct()中,從而當我們控制序列化字串時可以去直接觸發它們。
1.尋找 unserialize() 函式的引數是否有我們的可控點
2.尋找我們的反序列化的目標,重點尋找 存在 wakeup() 或 destruct() 魔法函式的類
3.一層一層地研究該類在魔法方法中使用的屬性和屬性呼叫的方法,看看是否有可控的屬效能實現在當前呼叫的過程中觸發的
4.找到我們要控制的屬性了以後我們就將要用到的**部分複製下來,然後構造序列化,發起攻擊
pdo 應用在 12 種不同資料庫中,方便在多種資料庫中切換,預處理語句可以防止 sql 注入。
<?php
$servername
="localhost"
;$username
="handy"
;$password
="123456"
;try
catch
(pdoexception $e
)?>
<?php
$servername
="localhost"
;$username
="handy"
;$password
="123456"
;try
catch
(pdoexception $e
)$conn
=null
;?>
<?php
$servername
="localhost"
;$username
="handy"
;$password
="123456"
;$dbname
="mydbpdo"
;try
catch
(pdoexception $e
)$conn
=null
;?>
<?php
$servername
="localhost"
;$username
="username"
;$password
="password"
;$dbname
="mydbpdo"
;try
catch
(pdoexception $e
)$conn
=null
;?>
CTF Web 安全學習 20 07 11
題目表述 x老師告訴小寧同學http通常使用兩種請求方法,你知道是哪兩種嗎?一種是get,一種是post。get在url中可以看到,形式為?a 1 post不會修改url,因此我們需要工具。我學習到了max hack bar工具。writeup如下 題目描述 x老師忘記刪除備份檔案,他派小寧同學去把...
演算法筆記學習筆記02
2.5 陣列 問題 a 習題6 4 有序插入 includeint main for i 0 i 10 i printf d n a i 問題 b 習題6 5 陣列元素逆置 includeint main 問題 c 習題6 6 楊輝三角 includeint main if n 2 return 0...
MVC學習筆記 02
仍然是mvc。其本身的框架說簡單也簡單,就是先在實體層中建立好所需要的實體的類,隨後開始在資料訪問層開始向資料庫讀取或是儲存資料,對我而言就是的sql增刪改插這幾種基本的sql語言,只不過每個層中都有自己宣告的物件,也會有一些其他層的引用,所以初學會看的有些混亂,經常出現未引用或是引用了卻使用錯誤這...