ctfhub-RCE

關于管道操作符

windows:

1. “|”:直接執行后面的語句。
2. “||”:如果前面的語句執行失敗,則執行后面的語句,前面的語句只能為假才行。
3. “&”:兩條命令都執行,如果前面的語句為假則直接執行后面的語句,前面的語句可真可假。
4. “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。

linux:

1. “;”:執行完前面的語句再執行后面的語句。
2. “|”:顯示后面語句的執行結果。
3. “||”:當前面的語句執行出錯時,執行后面的語句。
4. “&”:兩條命令都執行,如果前面的語句為假則執行執行后面的語句,前面的語句可真可假。
5. “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。

關于轉義字符

?由反斜杠 \ 后面跟一個或多個字符組成,其目的是為了表示那些不能直接輸入或具有特殊含義的字符。使用轉義字符可以明確其表示的是普通字符而不是特殊含義

1.eval執行

開啟環境,得到源碼主要是eval函數

eval函數:將內容轉為php語言進行執行

所以我們就直接傳入參數cmd沒有看到flag,就再往上進行穿越(或者直接進行查看根目錄也可以)查看到了flag,就去cat這個文件

2文件包含

得到源碼

strpos函數:strpos()函數用于查找字符串中某個子字符串的位置。

那么這個代碼就是:檢查是否有get傳參的參數file,查找參數file里是否有字符flag

由于代碼是!strpos所以需要不含flag,如果含就會輸出hacker

include():語句的主要作用是將指定文件的內容插入到當前 PHP 文件中該語句所在的位置,并當作當前文件的一部分來執行。

這里include()函數就提供了文件包含漏洞,文件包含漏洞同時要求那個被包含的文件是用戶通過傳參方式引入的,這個條件我們也滿足了

?那么我們就直接進行get傳參,傳入參數file,訪問shell.txt,然后進入這個文件,看到有一個request傳參“ctfhub”,所以進行傳參查看就好了

php://input

源碼

<?php
if (isset($_GET['file'])) {if ( substr($_GET["file"], 0, 6) === "php://" ) {include($_GET["file"]);} else {echo "Hacker!!!";}
} else {highlight_file(__FILE__);
}
?>

get傳參傳入參數file

且對參數file的前六個字符有限定,必須是“php://”

而且這里已經給了我們phpinfo界面了,我們直接看看

沒有flag直接給出,但是我們傳入php://input就可以執行傳入的php代碼

所以我們抓包去構造文件執行,寫入命令執行的php代碼

然后再進行cat那個flag文件

讀取源代碼

<?php
error_reporting(E_ALL);
if (isset($_GET['file'])) {if ( substr($_GET["file"], 0, 6) === "php://" ) {include($_GET["file"]);} else {echo "Hacker!!!";}
} else {highlight_file(__FILE__);
}
?>

get傳參file,前六字節限定為php://

而且直接告訴了我們flag文件在哪

所以我們就直接去訪問就好

用php偽協議

這樣就得到了一串base64編碼,進行base64解碼就可以了

遠程包含

和php://input類似

看到了flag,就去cat它

命令注入

源碼

<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$cmd = "ping -c 4 {$_GET['ip']}";exec($cmd, $res);
}?>

?get傳參傳入參數ip

ping -c 4?是一個常見的命令,用于向指定的 IP 地址發送 4 個 ICMP 數據包

也就是拼接了一個字符串,讓用戶輸入ip就能執行ping命令

exec($cmd, $res);

調用?exec?函數執行存儲在?$cmd?中的命令。

exec?函數會執行一個外部命令,并將命令的最后一行輸出存儲在?$res?數組中。

所以傳入ip地址以及一個命令

用管道符進行分隔,來使后面的可以被執行,因為使用exec函數,那么ls命令可以被執行

過濾cat

源碼

與上一題相似,get傳參傳入參數ip,管道符|直接執行后面的語句,我們隨便用個ip,然后ls查看目錄看到了flag文件,cat它

但是源碼中正則表達式將cat給過濾掉了,所以我們用tac

tac:從下往上查看

cat:從上往下查看

但是沒看到有flag,我們就看源碼

過濾空格

源碼同樣get傳參,參數ip,正則表達式將空格過濾掉了

所以我們就用同樣的方法查看目錄

看到了flag文件,cat它

但是通常我們cat文件是cat <文件名>

但是這里過濾了空格,用$IFS$4

這樣就可以查看flag文件里

空格過濾繞過:

1、大括號{}

??? {cat,flag.php}

2、$IFS代替空格

$IFS$9,${IFS},$IFS這三個都行

??? Linux下有一個特殊的環境變量叫做IFS,叫做內部字段分隔符 (internal field separator)。
??? ?cmd=ls$IFS-I
??? 單純$IFS2,IFS2被bash解釋器當做變量名,輸不出來結果,加一個{}就固定了變量名
??? ?cmd=ls${IFS}-l
??? $IFS$9后面加個$與{}類似,起截斷作用,$9是當前系統shell進程第九個參數持有者始終為空字符串。
??? ?cmd=ls${IFS}$9-l

3、重定向字符<,<>
4、%09繞過(相當于Tab鍵)

過濾目錄分隔符

;(命令分隔符): 無論前一個命令 cmd_1 是否成功,都會執行下一個命令 cmd_2。例: echo "Hello"

源碼


<?php$res?=?FALSE;if?(isset($_GET['ip'])?&&?$_GET['ip'])?{$ip?=?$_GET['ip'];$m?=?[];if?(!preg_match_all("/\//",?$ip,?$m))?{$cmd?=?"ping?-c?4?{$ip}";exec($cmd,?$res);}?else?{$res?=?$m;}
}
?>

由于源碼中禁用了分隔符\,所以我們不能直接訪問某文件夾下的文件

但是我們可以進入某文件夾,只要沒有穿越,就可以訪問文件了

所以,我們先查看該級目錄查看得到了一個目錄,有flag,那么我們就進入后并cat這個flag

同樣是沒有直接看到flag,但是可以看到有一條空的數組的顯示,那么就看源碼

過濾運算符

源碼

<?php$res?=?FALSE;if?(isset($_GET['ip'])?&&?$_GET['ip'])?{$ip?=?$_GET['ip'];$m?=?[];if?(!preg_match_all("/(\||\&)/",?$ip,?$m))?{$cmd?=?"ping?-c?4?{$ip}";exec($cmd,?$res);}?else?{$res?=?$m;}
}
?>

看源碼,可以知道被禁用的運算符并不多 ,僅僅只是|和&

也就是說我們還有其他的沒被禁用,比如;

所以我們就利用;來使后面的代碼被執行

綜合練習

源碼

<?php$res = FALSE;if (isset($_GET['ip']) && $_GET['ip']) {$ip = $_GET['ip'];$m = [];if (!preg_match_all("/(\||&|;| |\/|cat|flag|ctfhub)/", $ip, $m)) {$cmd = "ping -c 4 {$ip}";exec($cmd, $res);} else {$res = $m;}
}
?>

?被禁用了| ,\ ,& , 空格 ,/, ; cat ,flag ,ctfhub

管道符|,&,;都被禁用了,但是我們需要考慮用什么去替代他們實現

%0a可以替代管道符

所以得到:

看到了flag所在,我們再去查看一下flag_is_here目錄

用*繞過flag,${IFS}繞過空格

得到了flag所在的文件,再進行cat

但是需要用tac來進行cat的繞過

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

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

相關文章

Missashe考研日記-day28

Missashe考研日記-day28 1 專業課408 學習時間&#xff1a;2h學習內容&#xff1a; 今天先是預習了OS關于虛擬內存管理的內容&#xff0c;然后聽了一部分視頻課&#xff0c;明天接著學。知識點回顧&#xff1a; 1.傳統存儲管理方式特征&#xff1a;一次性、駐留性。2.局部性原…

01 appium環境搭建

環境搭建 Java JDKNode.jsAndroidStudio(提供sdk)appiumappium Inspector 相關安裝包下載 鏈接&#xff1a;https://pan.xunlei.com/s/VOOf3sCttAdHvlMkc7QygsoJA1# 提取碼&#xff1a;x4s5 AndroidStudio下載安裝sdk AndroidStudio下載 安裝運行&#xff0c;配置代理及測…

指針(4)

1.回調函數 回調函數就是通過函數指針調用的函數。 將函數的指針&#xff08;地址&#xff09;作為一個參數傳遞給另一個函數&#xff0c;當這個指針被調用其所指向的函數時&#xff0c;被調用的函數就是回調函數。回調函數不是由該函數的實現方直接調用&#xff0c;而是在特…

Raptor碼的解碼成功率matlab實現

下面是使用matlab實現關于Raptor 碼解碼成功率的仿真代碼&#xff0c;并繪制成功率隨編碼符號數量變化的圖形示例。代碼中包含了 Raptor 碼的預編碼&#xff08;使用稀疏矩陣乘法模擬&#xff09;、LT 編碼、解碼過程&#xff0c;以及解碼成功率的計算和繪圖。 具體代碼如下&am…

域名系統DNS

DNS介紹 DNS是一個域名系統&#xff0c;在互聯網環境中為域名和IP地址相互映射的一個分布式數據庫 &#xff0c; 能夠使用戶更方便的訪問互聯網&#xff0c;而不用去記住能夠被機器直接讀取的IP數串。類似于生活中的114服務&#xff0c;可以通過人名找到電話號碼&#xff0c;也…

Spark Streaming核心編程總結(四)

一、有狀態轉化操作&#xff1a;UpdateStateByKey 概念與作用 UpdateStateByKey 用于在流式計算中跨批次維護狀態&#xff08;如累加統計詞頻&#xff09;。它允許基于鍵值對形式的DStream&#xff0c;通過自定義狀態更新函數&#xff0c;將歷史狀態與新數據結合&#xff0c;生…

Dijkstra 算法代碼步驟[leetcode.743網絡延遲時間]

有 n 個網絡節點&#xff0c;標記為 1 到 n。 給你一個列表 times&#xff0c;表示信號經過 有向 邊的傳遞時間。 times[i] (ui, vi, wi)&#xff0c;其中 ui 是源節點&#xff0c;vi 是目標節點&#xff0c; wi 是一個信號從源節點傳遞到目標節點的時間。 現在&#xff0c;…

【java】lambda表達式總結

目錄 一、面向對象的處理方法 二、函數式編程的處理方法 先使用匿名內部類&#xff1a; lambda改造&#xff1a; lambda改造規則 示例&#xff1a; 三、補充&#xff1a;函數式接口 大家好&#xff0c;我是jstart千語。今天總結一下lambda表達式。lambda表達式在后面的s…

AtCoder Beginner Contest 242 G - Range Pairing Query (莫隊)

每周五篇博客&#xff1a;&#xff08;5/5&#xff09; 我做到了&#xff01; https://atcoder.jp/contests/abc242/tasks/abc242_g 這題主要是想給大家提供一份莫隊的板子&#xff0c;很多莫隊題基本上填空就差不多了&#xff08; 板子 void solve() {int n;std::cin >…

淘寶商品主圖標題api接口

1、輸入淘寶商品id或者鏈接&#xff0c;點查詢 2、查詢淘寶商品主圖&#xff0c;商品標題&#xff0c;商品價格&#xff0c;賣家旺旺 3、支持api接口

文心一言開發指南06——千帆大模型平臺新手指南

版權聲明 本文原創作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl 千帆大模型平臺為新手用戶提供了一個全面的入門指南&#xff0c;以便用戶能夠快速熟悉平臺的操作和功能。千帆大模型平臺通過提供詳細的新手指南&#xff0c;確保用戶能夠順…

Pacman-N-queen

文檔 代碼及文檔&#xff1a;通過網盤分享的文件&#xff1a;code 鏈接: https://pan.baidu.com/s/1Rgo9ynnEqjZsSP2-6TyS8Q?pwdn99p 提取碼: n99p 補充核心代碼 核心代碼內容&#xff1a; genetic_algorithm,py # -*- coding: utf-8 -*- """ Created on …

常用的多傳感器數據融合方法

1. 概述 根據具體需求&#xff08;實時性、計算資源、噪聲特性&#xff09;選擇合適的方法&#xff0c;實際應用中常結合多種方法&#xff08;如UKF與神經網絡結合&#xff09;。 傳統方法 &#xff08;KF/EKF/UKF/PF&#xff09;依賴數學模型&#xff0c;適合動態系統&#…

簡單幾步,開啟 Intel VT-x 讓電腦“解開CPU封印”

#vmware #虛擬機 #cpu虛擬化 # Intel VT-x 前言 你是不是也遇到過這種情況&#xff1a;在嘗試運行虛擬機&#xff08;VM&#xff09;、安卓模擬器&#xff0c;或者使用 Windows 沙盒、WSL2 等功能時&#xff0c;遇到了類似“此主機支持 Intel VT-x&#xff0c;但 Intel VT-x …

Go語言--語法基礎4--基本數據類型--字符串類型

在 Go 語言中&#xff0c;字符串也是一種基本類型。相比之下&#xff0c; C/C 語言中并不存在原 生的字符串類型&#xff0c; 通常使用字符數組來表示&#xff0c;并以字符指針來傳遞。 Go 語言中字符串的聲明和初始化非常簡單&#xff0c;舉例如下&#xff1a; var str st…

QT中的事件及其屬性

Qt中的事件是對操作系統提供的事件機制進行封裝&#xff0c;Qt中的信號槽就是對事件機制的進一步封裝 但是特殊情況下&#xff0c;如對于沒有提供信號的用戶操作&#xff0c;就需要通過重寫事件處理的形式&#xff0c;來手動處理事件的響應邏輯 常見的Qt事件&#xff1a; 常見事…

socket套接字-UDP(中)

socket套接字-UDP&#xff08;上&#xff09;https://blog.csdn.net/Small_entreprene/article/details/147465441?fromshareblogdetail&sharetypeblogdetail&sharerId147465441&sharereferPC&sharesourceSmall_entreprene&sharefromfrom_link UDP服務器…

C++入門小館: STL 之queue和stack

嘿&#xff0c;各位技術潮人&#xff01;好久不見甚是想念。生活就像一場奇妙冒險&#xff0c;而編程就是那把超酷的萬能鑰匙。此刻&#xff0c;陽光灑在鍵盤上&#xff0c;靈感在指尖跳躍&#xff0c;讓我們拋開一切束縛&#xff0c;給平淡日子加點料&#xff0c;注入滿滿的pa…

ALTER TABLE 刪除DROP表列的報錯: 因為有一個或多個對象訪問此列

目錄 1.問題 2.解決辦法 1.問題 刪除某個列名的時候&#xff0c;提示錯誤因為有一個或多個對象訪問此列 2.解決辦法 2.1 添加或刪除表新列名 將表中的字段設置Default 或 NOT NULL 都會給該字段添加約束&#xff0c;增加了這些約束后&#xff0c;再SQL腳本修改類型、刪除會發生…

python源碼打包為可執行的exe文件

文章目錄 簡單的方式&#xff08;PyInstaller&#xff09;特點步驟安裝 PyInstaller打包腳本得到.exe文件 簡單的方式&#xff08;PyInstaller&#xff09; 特點 支持 Python 3.6打包為單文件&#xff08;–onefile&#xff09;或文件夾形式自動處理依賴項 步驟 安裝 PyIns…