ctfshow-web入門-php特性(web104-web108)

目錄

1、web104

2、web105

3、web106

4、web107

5、web108


1、web104

需要傳入的 v1 和 v2 進行?sha1 加密后相等。

解法1:

這里都沒有判斷 v1 和 v2 是否相等,我們直接傳入同樣的內容加密后肯定也一樣。

?v2=1

post:?

v1=1

拿到 flag:ctfshow{bd4eea6b-872d-462c-b8f2-20f48d3ee652}?

解法2:

對于 php 強比較和弱比較:md5(),sha1() 函數無法處理數組,如果傳入的為數組,會返回 NULL ,兩個數組經過加密后得到的都是 NULL ,也就是相等的。

?v2[]=1

post:

v1[]=2

解法3:

對于某些特殊的字符串加密后得到的密文以 0e 開頭,PHP 會當作科學計數法來處理,也就是 0 的 n 次方,得到的值比較的時候都相同。

下面是常見的加密后密文以 0e 開頭的字符串:

md5:240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361sha1:10932435112: 0e07766915004133176347055865026311692244
aaroZmOk: 0e66507019969427134894567494305185566735
aaK1STfY: 0e76658526655756207688271159624026011393
aaO8zKZF: 0e89257456677279068558073954252716165668
aa3OFF9m: 0e36977786278517984959260394024281014729
0e1290633704: 0e19985187802402577070739524195726831799
?v2=aaroZmOk

?post:

v1=aa3OFF9m

2、web105

foreach 在?PHP 中用于遍歷數組或對象:

key 和 value 分別表示數組中的鍵和對應的值。

foreach ($array as $value) {// 對 $value 進行操作
}foreach ($array as $key => $value) {// 對 $key 和 $value 進行操作
}

一眼看到使用了兩個 $,直接將用戶輸入用作變量名,可能導致變量覆蓋問題。

$$key=$$value;

代碼中共有三個變量:$error,$flag,$suces

foreach($_GET as $key => $value){if($key==='error'){die("what are you doing?!");}

get 請求的 key(參數)不能是 error

foreach($_POST as $key => $value){if($value==='flag'){die("what are you doing?!");}

post 請求的 value(值)不能是 flag

(1)通過 die($error);? 輸出 flag,可以將 $error 覆蓋為 $flag,payload:

?suces=flag
? post: error=suces

get 傳入 suces=flag,請求參數不是 error,因此不會觸發第一個 die 函數;

接下來執行 $$key=$$value; 即 $suces=$flag,也就是將 $flag 的內容賦值給 $suces;

post 傳入 error=suces,value 是 suces,不是 flag,因此也不會觸發第二個 die 函數;

之后執行?$$key=$$value; 即 $error=$suces,也就是將 $suces 的內容賦值給 $error;

if(!($_POST['flag']==$flag)){die($error);
}

最后檢查是否 post 提交了 flag 并且內容就是 $flag,顯然是沒有的,前面還有一個 ! ,因此 if 語句成立,執行第三個 die 函數,輸出變量 $error 的內容,即我們 flag 的內容。

驗證:

拿到 flag:ctfshow{d346b9f7-d63f-492c-b573-c7ed4c7394e4}

其實這里的這個 $suces 只是一個中間者,我們只要不使用 error,其他任何的參數名都是可以的。

比如:

?1=flag
error=1

(2)通過 die($suces); 輸出 flag,將 $suces 覆蓋為 $flag,payload:

?suces=flag&flag=

或者?

?suces=flag
post:flag=

一來就先將 $flag 的內容賦給 $suces,之后將 $flag 賦為空(null),使得?$_POST['flag']==$flag 成立,執行?echo?"your?are?good".$flag."\n"; 和 die($suces); 進而輸出 $suces,即 flag 的內容。

3、web106

新增:

$v1!=$v2

采用數組繞過:

?v2[]=1
post:v1[]=2

拿到 flag:ctfshow{a0d7580e-60f6-4a19-bef2-af27d8c2d017}

4、web107

parse_str() 函數:把查詢字符串解析到變量中。

用法:parse_str(string,array)

參數描述
string必需。規定要解析的字符串。
array可選。規定存儲變量的數組名稱。該參數指示變量存儲到數組中。

關于題目代碼的詳細解釋:

parse_str($v1,$v2);

parse_str 函數將字符串 $v1 解析為變量并存儲到數組 $v2 中。
$v1 是一個包含查詢字符串的變量,例如:"flag=123&name=myon"。
解析后的結果將存儲在數組 $v2 中,例如:$v2 將包含 ['flag' => '123', 'name' => 'myon']。?

if($v2['flag']==md5($v3)){echo $flag;}

$v2['flag'] 是從解析后的數組 $v2 中獲取的 flag 參數值,檢查 $v2['flag'] 是否等于 md5($v3) 即 v3 經過 md5 加密后的值,等于則輸出 flag。

理解題目意思后,這里的 payload 就有很多,只要符合要求都可以:

?v3=123

post 傳入:

v1=flag=202cb962ac59075b964b07152d234b70

其中?202cb962ac59075b964b07152d234b70 是 123 的 md5 加密值:

拿到 flag:ctfshow{b91751db-f7b7-40ae-b920-fd2e3edc8964}

5、web108

代碼審計:?

ereg ("^[a-zA-Z]+$", $_GET['c'])

使用 ereg 函數檢查 $_GET['c'] 是否只包含大小寫字母,不滿足直接 die。

if(intval(strrev($_GET['c']))==0x36d){echo $flag;
}

通過 strrev 函數將 $_GET['c'] 反轉,使用 intval 將反轉后的字符串轉換為整數,檢查該整數是否等于十六進制的 0x36d(十進制的 877),如果相等,則輸出 $flag 的內容。

其中 ereg 函數存在 NULL 截斷漏洞,我們可以使用 %00 進行截斷,payload:

?c=a%00778

這樣正則就只會匹配 %00 之前的內容,即匹配到 a,符合要求,函數返回 true,if 語句不成立,跳過 die 函數,payload 經 strrev 函數反轉后變為?877%00a,因為是弱比較,會存在自動類型轉換,經過?intval 轉為整數 877,比較成立,輸出 flag。

拿到 flag:ctfshow{9fb901bb-8855-4a17-b4bc-a587d28a3f15}

為什么 %00 前面還要有一個 a,而不能是空的呢?

由于截斷前的內容為空,ereg 函數還是會返回 false,就像我們什么都沒有傳入一樣。

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

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

相關文章

SQL 多變關聯使用子查詢去重

不去重狀態 select a.*,b.recon_amt from free_settlement_first aleft join free_settlement_second b on a.settlement_first_id b.settlement_first_id 有2條數據出現了重復 使用子查詢去重 select a.*,b.recon_amt from free_settlement_first aleft join free_settlem…

Vue 最新動態!!!

大家好,我是CodeQi! 一位熱衷于技術分享的碼仔。 當Vue 3.4在六個月前發布時,整個前端開發社區都為之振奮。這次更新不僅帶來了許多新特性,還解決了許多開發過程中遇到的痛點。 然而,時間飛逝,隨著我在項目中不斷應用這些新特性,逐漸積累了很多寶貴的經驗和心得。 今…

一篇學通Axios

Axios 是一個基于 Promise 的 HTTP 客戶端,用于瀏覽器和 node.js 環境。它提供了一種簡單易用的方式來發送 HTTP 請求,并支持諸如請求和響應攔截、轉換數據、取消請求以及自動轉換 JSON 數據等功能。 Axios 名字的由來 Axios 的名字來源于希臘神話中的…

Linux操作系統入門(適用java軟件開發)

1.什么是操作系統? 操作系統(Operating System,簡稱 OS)是一種系統軟件,它管理和控制計算機硬件與軟件資源,為用戶和應用程序提供一個接口和環境來訪問計算機系統的服務和功能。操作系統的主要目標是提供一個方便、有…

探索性數據分析:使用Python與Pandas庫實現數據洞察

探索性數據分析:使用Python與Pandas庫實現數據洞察 引言 在當今數據驅動的時代,數據分析已成為決策制定、策略規劃和業務優化的關鍵環節。無論是商業智能、金融分析還是市場研究,數據分析都扮演著至關重要的角色。Pandas庫作為Python生態系統…

微積分-導數8(線性近似和微分)

線性近似 我們已經看到,在切點附近,曲線與其切線非常接近。事實上,通過放大可微函數圖上的某一點,我們注意到圖形看起來越來越像它的切線(見圖)。這一觀察是找到函數近似值的方法的基礎。 這個想法是&am…

Java [ 進階 ] JVM雙親委派機制?

目錄 ?探索Java進階 雙親委派機制? 理解 Java 的雙親委派機制 什么是雙親委派機制? 類加載器的層次結構 雙親委派機制的工作原理 優缺點分析 優點 缺點 一些面試題目: 什么是雙親委派機制? 雙親委派機制的工作流程是怎樣的&am…

monodepth代碼與原理對照實現

先實現demomonodepth/monodepth_simple.py at master mrharicot/monodepth GitHub import os os.environ[TF_CPP_MIN_LOG_LEVEL]0 這行代碼是為tensorflow設置環境變量TF_CPP_MIN_LOG_LEVEL,用來控制tensorflow c后端輸出的日志級別。0就是輸出所有級別的日志信息。包括(調…

vue2學習筆記3 - 開發環境知識補充:live server簡介

學習筆記1搭建開發環境中,在vs code里安裝了live server插件,后續多次使用open with live server來打開瀏覽器,展示代碼運行效果。本著知其然也要知其所以然的態度,稍稍了解了一下Live server。 什么是Live Server Live Server是…

探索Conda的依賴迷宮:包依賴樹的構建與解析

探索Conda的依賴迷宮:包依賴樹的構建與解析 引言 在復雜的軟件項目中,依賴管理是確保軟件正常運行的關鍵。Conda作為流行的Python包管理器,提供了強大的依賴樹功能,幫助用戶理解和管理包依賴關系。本文將詳細介紹如何在Conda中使…

個性化你的編碼世界:深度定制PyCharm主題與字體

個性化你的編碼世界:深度定制PyCharm主題與字體 引言 在編碼的旅途中,一個舒適且個性化的環境能夠顯著提升開發體驗。PyCharm作為業界領先的集成開發環境(IDE),提供了豐富的定制選項,允許用戶根據個人喜好…

力扣--20. 有效的括號

目錄 題目 思路 注意 題目 給定一個只包括 (,),{,},[,] 的字符串 s ,判斷字符串是否有效。 有效字符串需滿足: 左括號必須用相同類型的右括號閉合。左括號必須以正確的順序閉合。每個右括…

DP討論——適配器模式

學而時習之,溫故而知新。 敵人出招(使用場景) 說是自己的程序對接第三方的庫,但是自己的代碼的接口設計完畢了,如何對接上? 你出招 適配器模式就是為此而生的——我覺得應該是該解決方法被命名為了適配…

滯后序列分析案例詳解

一個半小時 超出30分鐘 日期:2024-07-13 19:14:33 回放 摘要 Python在行為分析中的應用 主要講述了如何使用Python處理序列數據,以及如何結合定性分析和定量分析來全面分析課程內容。講者提到了一種叫做分層法的分類方法,該方法使用了布魯…

ArcGIS Pro SDK (九)幾何 2 坐標

ArcGIS Pro SDK (九)幾何 2 坐標 文章目錄 ArcGIS Pro SDK (九)幾何 2 坐標1 矢量極坐標2 獲取矢量傾角3 獲取矢量方位角4 向量運算5 2D 矢量操作6 生成器 環境:Visual Studio 2022 .NET6 ArcGIS Pro SDK 3.0 1 矢量…

知識圖譜數據庫基本知識

文章目錄 知識圖譜數據模型知識圖譜查詢語言隨著知識圖譜規模的日益增長,數據管理愈加重要。一方面,以文件形式保存的知識圖譜顯然無法滿足用戶的查詢、檢索、推理、分析及各種應用需求;另一方面,傳統數據庫的關系模型與知識圖譜的圖模型之間存在顯著差異,關系數據庫無法有…

ctfshow-web入門-php特性(web96-web99)

目錄 1、web96 2、web97 3、web98 4、web99 1、web96 試了下通配、轉義、拼接、大小寫都不行 這里使用絕對路徑或者當前路徑繞過: ?u./flag.php ?u/var/www/html/flag.php 還可以使用 php 偽協議: ?uphp://filter/resourceflag.php 2、web97 關…

數據結構(Java):力扣Stack集合OJ題

1、括號匹配問題 . - 力扣(LeetCode) 1.1 思路分析 根據棧的先進后出原則,我們可以這樣解決問題: 遍歷字符串,遇見左括號就將左括號push入棧;遇見右括號就pop出棧,將出棧的元素和該右括號比較…

pyparsing開啟調試

在要匹配的表達后添加set_debug

【密碼學】實現消息認證或數字簽名的幾種方式

消息認證的目的是驗證消息的完整性和確認消息的來源。數字簽名的目的是不僅驗證消息的完整性和來源,還提供了不可否認性。此外,數字簽名還可以驗證消息的創建時間,防止重放攻擊。那么具體有哪些實現的方式呢? 一、僅提供消息認證…