CTFweb學習筆記02

2021-10-09 22:36:43 字數 2365 閱讀 7281

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語言,只不過每個層中都有自己宣告的物件,也會有一些其他層的引用,所以初學會看的有些混亂,經常出現未引用或是引用了卻使用錯誤這...