[RoarCTF 2019]Easy Calc-3.23BUUCTF練習day5(2)

[RoarCTF 2019]Easy Calc-3.23BUUCTF練習day5(2)

解題過程

查看源碼
在這里插入圖片描述發現calc.php頁面,訪問一下
在這里插入圖片描述

分析代碼

首先獲取$_GET['num']的值并賦給變量$str。然后定義了一個黑名單數組$blacklist,包含了一系列被禁止的字符或轉義字符,如空格、制表符、換行符、單引號、雙引號、反引號、方括號、美元符號、反斜杠和脫字符號

接下來是一個foreach循環,遍歷黑名單中的每一個元素。對于每個被禁止的字符$blackitem,使用preg_match函數和正則表達式來檢查$str中是否包含該字符。正則表達式中的/m修飾符表示多行模式,如果發現任何黑名單中的字符存在,就會調用die("what are you want to do?");終止腳本執行,并顯示提示信息

如果通過了所有黑名單檢查,最后一行代碼是eval('echo '.$str.';');,這里將輸入的$str拼接到echo語句中,并通過eval()函數執行

思路

通過多次嘗試,發現一輸入字符,就會被禁止訪問
在這里插入圖片描述而輸入數字,卻可以正常回顯
那么想起剛剛查看源碼信息卻沒有使用的waf防火墻,應該是waf的原因不能輸入字符
用于我們需要輸入字符構造命令,所以必須想要繞過waf

PHP字符串解析特性繞過WAF
PHP需要將所有參數轉換為有效變量名,因此在解析查詢字符串時,它會做兩件事:1,刪除空白字符;2,將某些字符轉換為下劃線(包括空格)
因為num不可以傳入字母,但是我們在num參數之前添加一個空格(? num=),這樣在PHP的語言特性下會默認刪除這個空格,但是WAF會因為這個空格導致檢測不到num這個參數,最終導致WAF被繞過。

繞過了waf,那么就剩下構造payload找出flag了
在此過程中需要三個函數

  • scandir()列出 參數目錄 中的文件和目錄,從而找到flag在哪里
  • var_dump()輸出一個或多個表達式的結構信息,包括表達式的類型與值(反正輸出的信息很詳細)
  • file_get_contents()輸出文件的具體內容,把整個文件讀入一個字符串中,確實也可以用include()函數繞過

步驟

在剛剛的代碼中知道過濾了/(反斜杠)需要使用chr繞過(chr是什么?chr()里頭是1-255的整數數字,其是對應ascii碼值。也就是說chr(47)也就是等價于 /)
payload是? num=var_dump(scandir(chr(47)))
列出根目錄下所有信息
在這里插入圖片描述找到flag的具體名稱f1agg
payload是? num=var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))也就是?num=var_dump(file_get_concents(/f1agg))其中.是PHP中的字符拼接符號,目的將/f1agg拼接起來

在這里插入圖片描述

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

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

相關文章

阻塞隊列:原理、應用及實現

阻塞隊列:原理、應用及實現 什么是阻塞隊列以生產消費者模型形象地理解阻塞隊列阻塞隊列實現生產消費者模型模擬實現阻塞隊列實現生產消費者模型 什么是阻塞隊列 阻塞隊列是一種特殊且實用的隊列數據結構,它同樣遵循 “先進先出” 的原則。與普通隊列不…

【開源寶藏】30天學會CSS - DAY5 第五課 脈沖動畫

以下是一個完整的漸進式教程,拆解如何用 HTML CSS 構建“Pulsar”水波脈沖動畫。通過閱讀,你將理解每個核心屬性與關鍵幀如何配合,讓一個小圓不斷散發動態波紋,并且文字始終停留在圓心。 第 0 步:項目概覽 文件結構示…

2060 裁紙刀

2060 裁紙刀 ??難度:簡單 🌟考點:2022、規律、思維 📖 📚 import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 100010…

TextView、AppCompatTextView和MaterialTextView該用哪一個?Android UI 組件發展史與演進對照表

在 Android 開發中,UI 組件一直在不斷演進,從最初的原生組件,到 Support Library(AppCompat 兼容庫),再到如今的 Material Design 組件。這篇文章將梳理 Android UI 組件的發展歷史,并提供詳細的…

python學習筆記--實現簡單的爬蟲(一)

任務:爬取豆瓣最受歡迎的250個電影的資料 鏈接:豆瓣電影 Top 250 用瀏覽器打開后,使用F12或鼠標右鍵--檢查,查看網頁的源代碼,分析網頁結構,如下圖所示: 分析后得知: 1.電影名位于…

Postgresql 刪除數據庫報錯

1、刪除數據庫時,報錯存在其他會話連接 ## 錯誤現象,存在其他的會話連接正在使用數據庫 ERROR: database "cs" is being accessed by other users DETAIL: There is 1 other session using the database.2、解決方法 ## 終止被刪除數據庫下…

self Attention為何除以根號dk?(全新角度)

全網最獨特解析:self Attention為何除根號dk? 一、假設條件:查詢向量和鍵向量服從正態分布 假設查詢向量 q i q_i qi?和鍵向量 k j k_j kj?的每個分量均為獨立同分布的隨機變量,且服從標準正態分布,即:…

numpy學習筆記10:arr *= 2向量化操作性能優化

numpy學習筆記10:arr * 2向量化操作性能優化 在 NumPy 中,直接對整個數組進行向量化操作(如 arr * 2)的效率遠高于顯式循環(如 for i in range(len(arr)): arr[i] * 2)。以下是詳細的解釋: 1. …

Cursor+Claude-3.5生成Android app

一、Android Studio下載 https://developer.android.com/studio?hlzh-tw#get-android-studio 等待安裝完成 二、新建工程 點擊new project 選擇Empty Activity 起一個工程名 當彈出這個框時 可以在settings里面選擇No proxy 新建好后如下 點擊右邊模擬器&#xff0c…

WPF Reactive 數據綁定

文章目錄 Combox 綁定List-通過枚舉綁定方法一:方法二:Button 綁定TextBlock綁定NumericUpDown綁定Expander綁定checkbox綁定NumericUpDownCombox 綁定List-通過枚舉綁定 方法一: ViewControl using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; usin…

算法及數據結構系列 - 滑動窗口

系列文章目錄 算法及數據結構系列 - 二分查找 算法及數據結構系列 - BFS算法 算法及數據結構系列 - 動態規劃 算法及數據結構系列 - 雙指針 算法及數據結構系列 - 回溯算法 算法及數據結構系列 - 樹 文章目錄 滑動窗口框架思路經典題型76. 最小覆蓋子串567. 字符串的排列438. …

Android adb調試應用程序

啟動app 有的時候app不是預先安裝的,也不能從界面start一個app,這時需要后臺拉起app。 $adb shell am start package.name/Activity.name 例如,android原生camera app, 包名為com.android.camera2, mainActivity名為…

Java EE(15)——網絡原理——TCP協議解析一

一.確認應答/(確認)序列號 接收方接收到數據后,向發送方返回一個確認信號(ack),告訴發送方數據被成功接收。ACK報文段只是作為確認使用的,一般來說不攜帶應用層數據(載荷),也就是說只有報頭部分。但有可能…

node-ddk,electron 組件, 打開新窗口

node-ddk 打開新窗口 https://blog.csdn.net/eli960/article/details/146207062 也可以下載demo直接演示 http://linuxmail.cn/go#node-ddk 本文講解如何在渲染進程發起創建新窗口, 包括 window.open 在主進程定義窗口類型 import main, { NODEDDK } from "node-ddk…

git管理時keil項目忽略文件列表

在使用 Git 管理 Keil MDK(μVision 5)工程時,需要忽略編譯生成的臨時文件、調試文件、用戶配置等非必要內容。以下是忽略文件的詳細列表及說明,可直接保存為 .gitignore 文件: Keil MDK 工程的 .gitignore 文件 giti…

C#單例模式

單例模式 (Singleton),保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化對個對象,一個最好的辦法就是,讓類自身負責保護它的唯一實例。這個類可以保證沒…

ZYNQ的cache原理與一致性操作

在Xilinx Zynq SoC中,Cache管理是確保處理器與外部設備(如FPGA邏輯、DMA控制器)之間數據一致性的關鍵。Zynq的ARM Cortex-A9處理器包含L1 Cache(指令/數據)和L2 Cache,其刷新(Flush/Invalidate&…

Linux NFS、自動掛載與系統啟動管理指南

1. NFS客戶端掛載導出的目錄的方式 NFS(網絡文件系統) 允許將遠程服務器的目錄掛載到本地,像訪問本地文件一樣操作遠程文件。掛載方式主要有兩種: 手動掛載:使用 mount 命令(臨時生效,重啟后丟…

NO.55十六屆藍橋杯備戰|排序|插入|選擇|冒泡|堆|快速|歸并(C++)

插?排序 插?排序(Insertion Sort)類似于玩撲克牌插牌過程&#xff0c;每次將?個待排序的元素按照其關鍵字??插?到前?已排好序的序列中&#xff0c;按照該種?式將所有元素全部插?完成即可 #include <iostream> using namespace std; const int N 1e5 10; …

【Oracle資源損壞類故障】:詳細了解壞塊

目錄 1、物理壞塊與邏輯壞塊 1.1、物理壞塊 1.2、邏輯壞塊 2、兩個壞塊相關的參數 2.1、db_block_checksum 2.2、db_block_checking 3、檢測壞塊 3.1、告警日志 3.2、RMAN 3.3、ANALYZE 3.4、數據字典 3.5、DBVERIFY 4、修復壞塊 4.1、RMAN修復 4.2、DBMS_REPA…