[安洵杯 2019]easy_serialize_php1

打開題目

題目源碼:

<?php$function = @$_GET['f'];function filter($img){$filter_arr = array('php','flag','php5','php4','fl1g');$filter = '/'.implode('|',$filter_arr).'/i';return preg_replace($filter,'',$img);
}if($_SESSION){unset($_SESSION);
}$_SESSION["user"] = 'guest';
$_SESSION['function'] = $function;extract($_POST);if(!$function){echo '<a href="index.php?f=highlight_file">source_code</a>';
}if(!$_GET['img_path']){$_SESSION['img'] = base64_encode('guest_img.png');
}else{$_SESSION['img'] = sha1(base64_encode($_GET['img_path']));
}$serialize_info = filter(serialize($_SESSION));if($function == 'highlight_file'){highlight_file('index.php');
}else if($function == 'phpinfo'){eval('phpinfo();'); //maybe you can find something in here!
}else if($function == 'show_image'){$userinfo = unserialize($serialize_info);echo file_get_contents(base64_decode($userinfo['img']));
}

我們簡單代碼審計一下

$function = @$_GET['f'];? //從 GET 請求中獲取名為 'f' 的參數,并賦值給 $function 變量。使用 @ 符號來抑制可能的未定義變量警告,

function filter($img){?? //定義了一個名為 filter 的函數,接受一個參數 $img
??? $filter_arr = array('php','flag','php5','php4','fl1g');? //$filter_arr 數組包含了需要過濾掉的關鍵詞列表,如 'php', 'flag', 'php5', 'php4', 'fl1g'。
??? $filter = '/'.implode('|',$filter_arr).'/i';
??? return preg_replace($filter,'',$img);

知識點:

implode函數

implode() 函數,把數組元素組合為字符串。

語法

implode(separator,array)
參數描述
separator可選。規定數組元素之間放置的內容。默認是 ""(空字符串)。
array必需。要組合為字符串的數組。

例子:

<?php
$arr = array('Hello','World!','I','love','Shanghai!');
echo implode(" ",$arr);
?>

運行結果為:

Hello World! I love Shanghai!

extract函數

定義和用法

extract() 函數從數組中將變量導入到當前的符號表。

該函數使用數組鍵名作為變量名,使用數組鍵值作為變量值。針對數組中的每個元素,將在當前符號表中創建對應的一個變量。

第二個參數 type 用于指定當某個變量已經存在,而數組中又有同名元素時,extract() 函數如何對待這樣的沖突。

該函數返回成功導入到符號表中的變量數目。

語法

extract(array,extract_rules,prefix)
參數描述
array必需。規定要使用的數組。
extract_rules

可選。extract() 函數將檢查每個鍵名是否為合法的變量名,同時也檢查和符號表中已存在的變量名是否沖突。對不合法和沖突的鍵名的處理將根據此參數決定。

可能的值:

  • EXTR_OVERWRITE - 默認。如果有沖突,則覆蓋已有的變量。
  • EXTR_SKIP - 如果有沖突,不覆蓋已有的變量。
  • EXTR_PREFIX_SAME - 如果有沖突,在變量名前加上前綴 prefix
  • EXTR_PREFIX_ALL - 給所有變量名加上前綴 prefix
  • EXTR_PREFIX_INVALID - 僅在不合法或數字變量名前加上前綴 prefix
  • EXTR_IF_EXISTS - 僅在當前符號表中已有同名變量時,覆蓋它們的值。其它的都不處理。
  • EXTR_PREFIX_IF_EXISTS - 僅在當前符號表中已有同名變量時,建立附加了前綴的變量名,其它的都不處理。
  • EXTR_REFS - 將變量作為引用提取。導入的變量仍然引用了數組參數的值。
prefix

可選。請注意 prefix 僅在 extract_type 的值是 EXTR_PREFIX_SAME,EXTR_PREFIX_ALL,EXTR_PREFIX_INVALID 或 EXTR_PREFIX_IF_EXISTS 時需要。如果附加了前綴后的結果不是合法的變量名,將不會導入到符號表中。

前綴和數組鍵名之間會自動加上一個下劃線

參考下面這個實例就能很清楚看明白如果變量有沖突,該怎么設置

實例

<?php
$a = "Original";
$my_array = array("a" => "Cat", "b" => "Dog", "c" => "Horse");extract($my_array, EXTR_PREFIX_SAME, "dup");echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a";
?>

運行結果為:$a = Original; $b = Dog; $c = Horse; $dup_a = Cat

知識點的參考文章:

PHP extract() 函數

PHP implode() 函數

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

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

相關文章

好的測試數據管理,到底要怎么做?

你的組織是否實施了測試數據管理&#xff1f;如果你的組織處理關鍵或敏感的業務數據&#xff0c;測試數據管理肯定會讓組織受益。與測試數據相關的問題占所有軟件缺陷的 15%&#xff0c;這一事實強調了測試數據的重要性。本文將準確討論測試數據經理職責、測試數據經理需要什么…

java-ssm-jsp廣播劇制作訂閱系統

java-ssm-jsp廣播劇制作訂閱系統 獲取源碼——》公主號&#xff1a;計算機專業畢設大全

AFL fork server和fuzzer的交互

看了一些博客&#xff0c;都是在說fuzzer和fork server進行交互&#xff0c;由fork server fork出子進程來執行程序&#xff0c;但是不太明白這兩者到底是如何在代碼層面進行交互的。 run_target中有這么一段代碼&#xff0c;大概意思是fuzzer給fork server傳遞prev_timed_out…

13.網絡游戲逆向分析與漏洞攻防-網絡通信數據包分析工具-如果沒有工具就創造工具

內容參考于&#xff1a; 易道云信息技術研究院VIP課 上一個內容 &#xff1a;12.游戲網絡通信存在的問題 現在把游戲網絡的架構看了一個小小的大概&#xff0c;可以用它的接口發數據接收數據了&#xff0c;如果真正想用它這一套東西&#xff0c;真正核心不在于它的接口而在于…

2024GAS《聲學大講堂》

由中國電子音響行業協會主辦&#xff0c;上海市浦東新區先進音視頻技術協會承辦的GAS《聲學大講堂》2021年開播&#xff0c;三年來GAS《聲學大講堂》開設了“沉浸聲音頻與藝術”、“智能車載音頻”、“智能可穿戴”、“智能耳機”、“智能音箱”、“專業音響”、“助聽/輔聽設備…

老衛帶你學---leetcode刷題(268. 丟失的數字)

268. 丟失的數字 問題 給定一個包含 [0, n] 中 n 個數的數組 nums &#xff0c;找出 [0, n] 這個范圍內沒有出現在數組中的那個數。 示例 1&#xff1a; 輸入&#xff1a;nums [3,0,1] 輸出&#xff1a;2 解釋&#xff1a;n 3&#xff0c;因為有 3 個數字&#xff0c;所以…

R語言安裝和簡單入門HelloWorld用法

R語言安裝和簡單入門HelloWorld用法 #R語言安裝地址 https://www.r-project.org/ click->CRAN mirror->選擇China下列表&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 選擇Download R for Windows 選擇base Download R-4.3.2 for Windows 下載文件R-4.3.2-…

怎么重構數據庫表結構

重構數據庫表結構是指對已有的數據庫表進行調整和優化&#xff0c;以提高數據庫的性能、可擴展性和可維護性。以下是一些重構數據庫表結構的常見步驟&#xff1a; 分析現有表結構&#xff1a;首先&#xff0c;仔細分析現有的數據庫表結構&#xff0c;了解表之間的關系和依賴關…

數據結構從入門到精通——算法的時間復雜度和空間復雜度

算法的時間復雜度和空間復雜度 前言一、算法效率1.1 如何衡量一個算法的好壞1.2 算法的復雜度 二、時間復雜度2.1 時間復雜度的概念2.2 大O的漸進表示法2.3常見時間復雜度計算舉例2.4等差數列計算公式2.5等比數列計算方法 三、空間復雜度四、 常見復雜度對比五、 復雜度的oj練習…

ts學習:is關鍵詞

is關鍵詞主要用來框定類型并實現對應的類型斷言&#xff0c;下面看一個例子 寫一個簡單函數來判斷某個值是否是字符串類型 function isString(value:unknown):boolean{return typeof value "string" } 這里我們的參數選用了unknown類型&#xff0c;該類型就是一個…

python代碼優化學習

代碼優化對比&#xff1a; 優化前&#xff1a; # 登錄系統 xxljob_login() start_time time.time() # 循環處理需要補數的數據 for item in authId_lists: preSettleInfoHandler(item) count 1 print("運行了第" str(count) "個") …

數據分析---主要工作

目錄 幾個主要工作常用的數據分析工具具體的使用場景幾個主要工作 數據清洗和預處理:對原始數據進行清洗、去重、填充缺失值、處理異常值等操作,以確保數據的準確性和完整性。探索性數據分析(EDA):通過可視化和統計方法,對數據進行探索,發現數據的分布、相關性、異常情況…

【JVM】聊聊常見的JVM排查工具

JDK工具包 jps 虛擬機進程狀況工具 jps是虛擬機進程狀況工具&#xff0c;列出正在運行的虛擬機進程&#xff0c;使用 Windows 的任務管理器或 UNIX 的 ps 命令也可以查詢&#xff0c;但如果同時啟動多個進程&#xff0c;必須依賴 jps。jps -l 顯示類名 jps :列出Java程序進程…

linux vi 退出編輯狀態

在 vi 編輯器中&#xff0c;要退出編輯狀態并保存或者放棄更改&#xff0c;需要執行以下步驟&#xff1a; 1. 保存并退出&#xff1a; - 按下 Esc 鍵確保你處于正常模式&#xff08;Normal Mode&#xff09;。 - 輸入 :wq&#xff0c;然后按下 Enter 鍵。這將保存更改并…

SVPWM

SVPWM SVPWMSVPWM原理產品比較特點來源 SVPWM SVPWM的主要思想是以三相對稱正弦波電壓供電時三相對稱電動機定子理想磁鏈圓為參考標準&#xff0c;以三相逆變器不同開關模式作適當的切換&#xff0c;從而形成PWM波&#xff0c;以所形成的實際磁鏈矢量來追蹤其準確磁鏈圓。傳統…

3.1作業

改變圖片色彩————德國國旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fpfopen("./haha.bmp","r");int h0,w0;fseek(fp,18,SEEK_SET)…

yolo訓練時遇到GBK編碼問題

yolo訓練時遇到GBK編碼問題 啟動訓練具體信息如下&#xff1a; comet upload E:\python\yolov9-main.cometml-runs\e0c17dd22058467f98cf447d5cc45bf5.zip COMET INFO: Using ‘D:\pycharmProject\yolov5-master-6.2\.cometml-runs’ path as offline directory. Pass ‘off…

高比例清潔能源接入下計及需求響應的配電網重構(matlab代碼)

目錄 1 主要內容 目標函數 重要約束條件 2 部分代碼 3 程序結果 4 下載鏈接 1 主要內容 該程序復現《高比例清潔能源接入下計及需求響應的配電網重構》&#xff0c;以考慮網損成本、棄風棄光成本和開關操作懲罰成本的綜合成本最小為目標&#xff0c;針對配電網重構模型的…

3694-51-7,3,5-Dinitro-1,2-phenylenediamine,合成其他化合物的重要中間體

您好&#xff0c;歡迎來到新研之家 文章關鍵詞&#xff1a;3694-51-7&#xff0c;3,5-Dinitro-1,2-phenylenediamine&#xff0c;3,5-二硝基-1,2-苯二胺;3,5-二硝基苯-1,2-二胺 一、基本信息 【產品簡介】&#xff1a;3,5-Dinitro-1,2-phenylenediamine, with the molecular…

提取抖店賣家電話的爬蟲軟件

介紹&#xff1a; 如今&#xff0c;電商平臺上的抖店賣家數量龐大&#xff0c;對于想要聯系賣家的買家來說&#xff0c;獲取賣家的聯系電話是一項相當繁瑣的任務。為了簡化這個過程&#xff0c;我們可以借助Python編寫一個抖店賣家電話提取爬蟲軟件&#xff0c;快速獲取所需的聯…